どの日付をテストすべきか
日付テストの半分は時計を動かすことです。もう半分は、どこへ動かすかを知ることです。オンラインの電卓なら、今日から 90 日後がいつかは教えてくれます。しかし、その日が銀行の休業日だとか、四半期の最終日だとかは教えてくれません。
04/08/2008 を貼り付けると、1 つに決め打ちせず、両方の読みを表示します。実際の祝日を考慮した営業日
「10 営業日後」は単純な算術ではありません。どの国のカレンダーで数えるかによって変わります。同じ開始日、同じ 10 日間で、答えが 2 通りになります。
$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking result: 2027-09-16T00:00:00 $ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl result: 2027-09-15T00:00:00
1 日違います。間の日付について尋ねれば、電卓がその理由を教えてくれます。
$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking metadata: weekday Monday business day no (us-banking) holiday Labor Day what this date lands on: public holiday (weekend and holiday marks follow the us-banking calendar)
アメリカとポーランドは参照用のカレンダーとして同梱されています。この 2 つで、固定日、月の第 n 週の曜日、復活祭から計算される日付、土曜日に当たる祝日が前の金曜日に振り替えられるアメリカの規則と、存在するあらゆる種類の規則を網羅できるからです。国を追加するのはデータファイルの追加であり、コードの変更ではありません。
すべての形式を一度に
テスト対象のアプリは、期待する形式で日付を求めます。変換の手間をかけさせる代わりに、電卓はすべての形式を出力します。標準的な形式に合わないものには、独自のマスクも使えます。
$ chrono calc --preset year-2038 --zone +00:00 Chrono Mock - date calculator preset: year-2038 - 2038 boundary explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)? result: 2038-01-19T03:14:07 formats: ISO date 2038-01-19 ISO datetime 2038-01-19T03:14:07+00:00 US 01/19/2038 PL 19.01.2038 epoch (s) 2147483647 epoch (ms) 2147483647000 FILETIME 137919572470000000 RFC 1123 Tue, 19 Jan 2038 03:14:07 GMT ... what this date lands on: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
このエポック値は偶然ではありません。2147483647 は符号付き 32 ビット整数が保持できる最大の数であり、この日付が重要である理由のすべてです。
日付を逆向きに読む
逆方向も同じくらい役に立ちます。ログから日付を貼り付けて、それが何かを調べます。形式が曖昧なとき(04/08 は世界の半分で曖昧です)、1 つに決め打ちせず、両方の読みを表示します。もともとのバグ報告は、決め打ちから生まれたものだからです。
$ chrono calc --analyze 04/08/2027 Chrono Mock - date analysis input: 04/08/2027 (ambiguous - month/day order differs by locale) US MM/DD/YYYY: 2027-04-08 (Thursday) PL DD/MM/YYYY: 2027-08-04 (Wednesday)
4 か月も離れており、曜日も違います。ISO 形式の日付は曖昧さがなく、そのとおりに読まれます。日付ですらないものは、推測されずに拒否されます。
文ではなく、ステップで組み立てる
時点とは、起点にステップを加えたものです。途中の結果は各ステップのあとに表示されるので、意外な答えを出す式でも、どこで曲がったかが分かります。ステップは 5 種類。単位によるずらし、時刻の設定、期間の境界へのスナップ、最も近い営業日への移動、別のタイムゾーンでの表し直しです。
# 年が変わる直前の最後の 1 秒 chrono calc --base today --snap eoy # 90 営業日後、アメリカの銀行カレンダーで chrono calc --base today --shift +90bd --calendar us-banking # 18 年と 1 日前、年齢確認のため chrono calc --base today --shift -18y --shift -1d
計算した日付はそのまま置き換えセッションに渡せます。--json なら同じ結果を機械向けの形式で出力します。テストする価値のある日付 →