1. はじめに
簡潔なバイナリ オブジェクト表現 (CBOR) [RFC7049] は、事前に合意されたスキーマを必要とせずに、構造化データの交換を提供します。RFC 7049 は、基本的なデータ型のセットと、IANA レジストリを介してサポートされるデータ型のセットを拡張できるタグ付けメカニズムを定義しています。
本仕様では、時間を含まない日付を表すテキスト文字列の CBOR タグを定義します。タグ付けされたテキスト文字列は、RFC 3339 [RFC3339] の "full-date" 生成規則で指定されたとおりに表現されます。RFC 3339 によると、これはグレゴリオ暦内の日付を表します。
本仕様では、時間を含まない日付を表す整数の CBOR タグも定義しています。タグ付けされた整数は、グレゴリオ暦の日付 1970-01-01 からの日数を示す符号なしまたは負の値です。実装上の注意として、この値は修正ユリウス日 (スミソニアン天体物理観測所によって 1858 年 11 月 17 日からの日数として定義されています) から一定のオフセットを持ちます。この値は修正ユリウス日から 40587 を引いたものです。
両方のタグは時間を含まない日付用であるため、時刻、タイムゾーン、およびうるう秒はこれらの値には適用されないことに注意してください。これらのタグは両方ともグレゴリオ暦の日付の表現用です。
1.1. 暦日付
暦日付は、重要なイベントの日付をマークするなど、多くの人間が使用するユースケースで使用されます。たとえば、ジョン・レノンは 1940 年 10 月 9 日に生まれ、1980 年 12 月 8 日に亡くなりました。そのようなユースケースの 1 つは運転免許証で、通常は生年月日が含まれています。本仕様で使用される日付は、RFC 3339 [RFC3339] の日付と同様に、グレゴリオ暦を使用しています。これらのイベントのタイムゾーンと実際の時刻は、意図的に暦日付には表現されていません。
2 つ目のタグ (グレゴリオ暦の日付 1970-01-01 からの日数を表す) に選択されたエポックは、IEEE Std 1003.1, 2013 Edition [POSIX.1] の時間エポック 1970-01-01T00:00:00Z UTC に関連していますが、これは両方が日付 1970-01-01 を含んでいるという点においてのみです。これは、このタグを使用する日付が特定の時刻やタイムゾーンを表すことを示すものと解釈されるべきではありません。
曜日 (日曜日、月曜日、火曜日など) は、これらのどの日付形式でも明示的に表現されていません。ただし、本仕様の範囲外である決定論的アルゴリズムを使用して、これらの両方の形式で表される日付からグレゴリオ暦の曜日を導出できます。
1.1.1. 日付表現の例
この表には、両方のタグを使用した日付の表現例が含まれています。
| 日付 | タグ 1004 | タグ 100 |
|---|---|---|
| 1940 年 10 月 9 日 | "1940-10-09" | -10676 |
| 1980 年 12 月 8 日 | "1980-12-08" | 3994 |
表 1
1.2. 日付の比較
"full-date" 形式の日付の比較は、通常の文字列比較によって実行できます。これは、設計上、日付を表す数字が固定形式であり、最上位から最下位の順に並んでいるためです。1970-01-01 からの日数を表す数値の日付の比較は、通常の整数比較によって実行できます。他の形式または他の暦を使用する日付の比較には、本仕様の範囲外の変換が必要です。
日付が決定されたタイムゾーンによっては、異なる日付が同じ瞬間に対応する場合があることに注意してください。たとえば、一日の多くの時間において、日本の特定の日付に行われる電話会議は、ハワイでは同時に前日に行われます。一日の多くの時間において、日本の金曜日はハワイの木曜日に対応します。
1.3. 日付と日時値の比較
日付と日時値 (特定の瞬間を表す) を比較することは、本仕様の範囲外です。とはいえ、日付にタイムゾーンと時刻が追加されれば、特定の日時値を決定でき、その日時値を他の値と比較することが可能になります。たとえば、ジョン・レノンの生年月日である 1940 年 10 月 9 日に、彼が生まれた時刻とタイムゾーンを追加すれば、彼が生まれた日時を導き出し、他の日時値と比較することができます。