国際規格ISO 8601 は、日付と時刻のデジタル表現を規定しています。この表記は、多数の異なる国の表記による国際コミュニケーションにおける混乱のリスクを避けることを特に目的としています。さらに、この表記法は他の表記法と比較して、コンピュータでの使用において多くの利点があります。これは、参照NF EN 28601の下でフランスの規格に含まれています。
この形式には、アプリケーションに応じて 6 つの粒度レベルがあります。このため、特定の要素を省略することが可能です。
例:
- 1977-04-22T01:00:00-05:00は、1977 年 4 月 22 日の北米東部標準時午前 1 時 (5 時間の差) に相当します。
- 1977-04-22T06:00:00Z は同じ瞬間に相当します。
| 現在の ISO 日付: |
|---|
| 2007-06-28T21:41:54Z |
| またはもう一度: |
| 2007-W26-4T21:41:54Z |
原理
日時
最も正確でない要素から始めて、最も詳細な要素に向かって進みます。したがって、最初に年(4 桁)、次に月(2 桁、「01」から「12」)、最後に 日付(「01」から「31」) が来ます。各要素は、その前の要素とハイフン「-」で区切られます。日付はグレゴリオ暦に基づいています。したがって、この暦の実施前 (1582 年以前) の年を表す必要がある場合は、情報を交換する当事者間でカウント方法を事前に合意する必要があります。
次に、文字T ( Timeまたは英語のhour) で始まる時刻を示します。便利な要素がこの順序で続きます: 時間 (「00」から「24」)、分 (「00」から「59」)、コロン「:」を使用した秒 (「00」から「60」)セパレーター用。
場合によっては、その後にコンマ ‘,’ が続き、その後に2 番目の小数点が続きます。特に英語話者の間では、コンマの代わりにピリオド(許容) が使用される場合があることに注意してください。ただし、標準ではカンマが好まれます。
重要な注意事項:
- 小数点以下の桁を追加する必要がある場合は、使用される精度に応じて必要なだけ追加します。例: T15:23:56.9854
- 時間表記に数字「24」が使用されている場合、分と秒は「00」でなければなりません。これは、日付が指定されていない場合に 1 日の開始と終了を区別するための IT における実用的な方法です。 T24:00 は、厳密には翌日の T00:00と同等です。
- 一方、秒を「60」と書くと、確かに61秒を表します。実際、特定の月の前にうるう秒を追加または削除する必要がある場合があります。 (詳細については、UTC世界時に関する記事を参照してください)。したがって、 T23:59:60 は、必要に応じて、 T23:59:59とT24:00:00の間に追加された秒を表します。
もちろん、通常時の表示にはこれらの可能性が役に立たないことは理解されています。たとえば、同期されたクロックは通常、このうるう秒を示さず、徐々に再同期することを好みます。使用されているかどうかに関係なく、標準規格がこれらのうるう秒の表示を実際に提供しているという事実は変わりません。

タイムゾーン
ISO 8601標準で受け入れられるすべての形式で、タイム ゾーンを指定できます。現地時間が世界時(UTC) より進んでいる場合、開始記号は正 (+) になります (グリニッジ標準時子午線より東のタイム ゾーン: 中央ヨーロッパ、中央アフリカ、東部、アジア、西部、中央太平洋のタイム ゾーン)。 )。それ以外の場合は負 (−) (西ヨーロッパまたは西アフリカ、南北アメリカ、東太平洋の一部の国のタイムゾーン)。このタイムゾーンを示す方法は 3 つあります。
- 基本形式に+ hhmiまたは− hhmi を追加します。hh は時間数を表し、 mi は世界時からのオフセット分数を表します (マイナス記号は通常、ASCIIハイフンマイナス文字ですが、一部の表現では数学的なマイナス記号が使用できます) 、幅はプラス記号の幅と同じです)。
- 拡張形式で+ hh : mmまたは– hh : miを追加すると、時刻区切り文字:はリテラルに記述されます。
- UTC 時間に関しては、文字通り最後にZ を入力します。 ( Zはゼロ・メリディアン、または(en)ゼロ・メリディアン。国際無線アルファベットではZ ulu (ズールーと発音) としても知られています)。
混乱を避けるために、これは実際には UTC 時間から表現されたオフセットであることに注意してください (に向けたものではありません)。これはタイムゾーンを示すものであるため、これは当然のことです。したがって、T09:00:00+01:00 は T08:00:00Z に対応します (UTC より 1 時間長いゾーンでは 9 時間、したがって UTC では 8 時間)。
通常のフォーマット
以下では、提示される形式を記号化するために次の表記が使用されます。
- aaaa は、グレゴリオ暦を 4 桁の固定数字で表します (1583 から 9999、0001 から 1582 年は相互の合意が必要です。4 桁を超える年への拡張も同様です。イエス キリスト以前の年を表す標準的な表現はありませんが、一部ではそれが許可されています)相互合意により、0000 を除いた古典的な年の指定には、リテラルの接頭辞Bの後に 0001 から始まる 4 桁が続くか、UTC カレンダーの予期的グレゴリオ暦拡張の場合には、接頭辞Uの後に記号と 0000 から始まる 4 桁が続きます。 9999 = U+9999、または B9999 より前、または U-9999 より前。不完全な日付の基本的な標準形式と矛盾するため、5 桁以上の固定数字を使用するには相互の合意も必要です)。
- − は、基本形式にはなく、拡張形式 (ISO 標準日付区切り文字) で文字通り (マイナス記号、ASCII、または数学的) 書かれます。
- mmは年の月番号を2桁(01~12)で表します。
- qq は月内の日付を 2 桁(01 ~ 31)で表します。
- qqq は西暦の日付を 3 桁(001 ~ 366)で表します。
- YYYY は4 桁の ISO 年を表します。
- W は常に文字通りに書かれます。
- ww はISO の週を 2 桁 (01 ~ 53) で表します。
- jはISOの曜日を1桁(1~7)で表します。
- T は常に文字通りに書かれます。
- hh は時刻を 2 桁 (00 ~ 23) で表します。
- :は拡張形式 (ISO 標準時刻区切り文字) で文字通り書かれます。
- mi は分を 2 桁(00 ~ 59)で表します。
- ss は秒を 2 桁で表します (00 ~ 60、UTC 標準に従って、特定の日の最後の1 分に追加される秒を考慮します)。
- 。拡張形式 (ISO 小数点記号。相互合意により、代わりにカンマの使用が許可されます) で文字通り書かれます。
- n は、1 つ以上の桁の秒の小数部を表します。
- zzzzz は、基本形式 ( Zまたは+ hhmiまたは−hhmi ) でタイムゾーンを表します。
- zzzzzz は、拡張形式 ( Zまたは+ hh : miまたは−hh : mi ) でタイムゾーンを表します。
次の形式を使用して次のことを示すことができます。
- その年だけ:
- 基本フォーマット:「 aaaa 」(例:1997)
- 拡張フォーマットなし
- 年と月:
- 基本形式:「 aaaamm 」(例:199707)
- 拡張形式:「 yyyy − mm 」(例:1997−07)
- 完全なカレンダーの日付 (年、月、日):
- 基本形式:「 aaaammqq 」(例:19970716)
- 拡張形式:「 yyyy − mm − qq 」(例:1997−07−16)
- 完全な日付 (年、日付):
- 基本形式:「 aaaaqqq 」(例:1997206)
- 拡張形式:「 aaaa − qqq 」(例:1997−206)
- 週番号に応じた完全な週の日付 (ISO 年、ISO 週、ISO 曜日):
- 基本フォーマット:「 AAAA W wwj 」(例:2004W453)
- 拡張形式:「 YYYY −W ww − j 」(例:2004−W45−3)
- 時間と分を含む完全なカレンダー日付:
- 基本形式: “ aaaammqq T hhmizzzzz ” (例: 19970716T1920+0100)
- 拡張形式: ” aaaa − mm − qq T hh : mizzzzzz ” (例: 1997−07−16T19:20+01:00)
- 完全なカレンダーの日付に時、分、秒を加えたもの:
- 基本形式: ” aaaammqq T hhmisszzzzz ” (例: 19970716T192030+0100)
- 拡張形式: ” aaaa − mm − qq T hh : mi : sszzzzzz ” (例: 1997-07-16T19:20:30+01:00)
- 秒の小数部を含む完全なカレンダーの日付と時刻 (相互に合意しない限り、拡張形式に存在する ISO 小数点区切り文字はポイントであり、カンマではありません):
- 基本形式: ” aaaammqq T hhmissnzzzzz ” (例: 19970716T1920304+0100)
- 拡張形式: ” aaaa − mm − qq T hh : mi : ss . nzzzzzz ” (例: 1997-07-16T19:20:30.4+01:00)
- 時間のみ:
- 基本フォーマット:「 T hzzzzz 」(例:T19+0100)
- 拡張形式:「 T hhzzzzzz 」(例:T19+01:00)
- 時と分:
- 基本フォーマット:「 Thhmizzzzz 」 (例:T1920+0100)
- 拡張形式: “ T hh : mizzzzzz ” (例: T19:20+01:00)
- 時、分、秒:
- 基本形式: “ Thhmisszzzzz ” (例: T192030+0100 )
- 拡張形式: “ T hh : mi : sszzzzzz ” (例: T19:20:30+01:00)
- 秒の小数部を含むフルタイム (相互に合意しない限り、拡張形式に存在する ISO 小数点区切り文字はカンマではなく点です):
- 基本フォーマット: “ Thhmissnzzzzzz ” (例: T1920304+0100 )
- 拡張形式: ” T hh : mi : ss . nzzzzzz ” (例: T19:20:30.4+01:00)
年間の日
年とその年の何日かを指定することで日付を表すことができます。つまり、「001」から「365」(必要に応じて「366」)までの 3 桁の数字です。例: 1970-033 は、1970 年の33日目を表します。つまり、1970 年 2 月 2 日を表します。この表記は、年の後の 3 桁のおかげで独特です。 (月だけでは 2 桁しか使用できません。月と 日付の場合は短縮表記で 4 桁が必要です。)
週番号
番号付けシステム
業界は、組織化して生産計画を立てるために、1 年の週に番号を付ける (第 1 週、第 2 週、… 52 週、さらには 53 週など) という習慣が定着しています。実際には、必ずしも誰もが同じ番号付け規則に従っているわけではありません(たとえば、カナダと米国では、月曜日ではなく日曜日が週の最初の日であると考えられています)。この ISO 規格は、国際的に認知され、一般的に使用されている番号付けルールを厳密に定義しています。
- 週は月曜日から始まります。
- 各曜日には、月曜日の 1 (ワン) から日曜日の 7 (セブン) までの番号が付けられます。
- 第 1 週には、年の最初の木曜日が含まれます。
注意事項と結果:
- 第 1 週には、その年の大半の日 (少なくとも 4 日) が最初に含まれます。体系的には 1 月 4 日が含まれています。月曜日が元旦に最も近い月曜日でもあります。遅くても 12 月 29 日まで、遅くても 1 月 4 日までに開始されます。
- 年の最後の週 (52 または 53) は、年の最後の木曜日を含む週です。 1 年の大半の日 (少なくとも 4 日) が最後にあり、体系的には 12 月 28 日が含まれます。また、日曜日が 12 月 31 日に最も近い日曜日でもあります。遅くても 12 月 28 日まで、遅くても 1 月 3 日までに終了します。
- 第 0週はありません (前年の最終週の直後に年の第 1 週が続きます)。
- 第 1 週の最初の日は、おそらく前年の 12 月末になる可能性があります。同様に、年の最後の週 (52 または 53) の最後の日が翌年の初めになる場合があります。 1 年は常に合計52 週間または 53 週間のいずれかになります。
- 年は通常 52 週(365 日 = 52×7 + 1)です。したがって、 1 月1 日が月曜日である年の場合、12 月 31 日も月曜日になります (うるう年の場合は火曜日)。元旦が木曜日である年のみ、週が 53 週になります (閏年の場合は水曜日または木曜日)。
標準化されたスコアリング
この規格では、週に応じて日付を記述することも規定されています。文字W (英語のWeek 、week を表す) で始まり、その後に 2 桁の週番号 (場合によっては 1 から 7 までの日番号) が続く必要があります。たとえば、 2005-W52-1 は、 2005 年の第 52 週の初日 (月曜日) に対応します。つまり、2005 年 12 月 26 日月曜日 (または2005-12-26 ; 2 つの記述は同等です)。
同様に、 2005-W52-7 は2005 年の最終週の日曜日に対応します。したがって、2006 年 1 月1 日になります。
( 2006-W01-1 は2006 年 1 月 2 日月曜日、つまり2006-01-02に対応します)
2004W48 は、 2004 年の第 48 週を示します。
コンピュータアルゴリズム
コンピューティングにおける週番号の自動計算は単純ですが、それでも各年の間に重要な週があるため、簡単ではありません。したがって、この反省は共有される価値があります。
多くのコンピュータープログラミング言語では、ツールは日曜日 (値0 ) から始まり、月曜日は 1、土曜日は最大 6 まで曜日をカウントすることに注意することが重要です。一部の国では週が日曜日から始まり、テストでは数学的に (モジュロ 7) 0 と 7 が同じものになるため、これは完全に愚かではありませんでした。ただし、表示の場合、これは対処すべき特殊なケースになります。標準化された番号を直接与える関数が存在する場合があります。
特定の日付からその週の ISO 番号を計算する関数を作成する場合、効率的で高速な優れたアルゴリズムは、たとえば次のとおりです。
- 検索した日付と同じ週の木曜日を計算します。特別なテストを行わずに、確実に正しい年に数えられるように、今週木曜日の週番号を計算します。 (今週の木曜日は前後の年になる可能性がありますが、それが重要です。)
- 同じ年の1月4日を今週の木曜日とみなします
- 1 月 4 日と同じ週の月曜日を計算します (これにより、カウントの開始が識別されます。この月曜日自体が前年になる可能性があることに注意してください。それは問題ではありません)。
- 2 つの特定の日付 (今週の木曜日と今週の月曜日) の間の経過日数を計算します。
- 7 で割ります (次の整数に切り上げます)。望ましい結果が得られました。
一部のアルゴリズムは、多かれ少なかれ正当な例外を使用したり、特定の日付に対して誤った値を返したりすることがあります。この利点は、一般的に利用可能な機能 (閏年や日数のカウントが既に実装されている) を活用しながら、信頼性が高いことです。
注: 日付に対応する日 D がわかっている場合 (月曜日の場合は D=1、日曜日の場合は D=7 まで)、必要に応じて既存の関数を調整します。次に、同じ週の木曜日が (D-4) 日前に位置します (マイナスの場合は後になります)。関連する月曜日は (D-1) 日前です。考えられる例は、記事のディスカッション ページに記載されています。
略記
有用な要素のみを示すことも可能です。たとえば、特定の日や時刻を指定しなくても、2003 年 2 月を2003-02と指定できます。一般に、不要な情報は削除できます (たとえば、時刻のみが操作される場合は日付)。たとえば、 T23:45となります。
特定のコンテキストでは、表記はすべて同じ方法で省略される必要があります。したがって、すべて同じ文字数になります。すべて同じ情報です。そうしないと、この正規化による一貫性と並べ替えの容易さという利点が失われます。
別の例として、タイム ゾーンが指定されている場合、分を指定する必要は必ずしもありません (多くの場合、不要です)。したがって、 T23:05+05:00 は、次のようにT23:05+05またはT2305+05と省略することもできます。
最後に、読みやすさを犠牲にしてコンパクトなサイズが必要な場合は、特定の区切り文字 (ダッシュまたはコロン) を削除することができます。混乱を避けるために、それらをすべて削除する(すべてのハイフンおよび/またはすべてのコロン)ことが適切です。文脈を無視して書かれた文章は、理解可能なものである必要があり、特にそれが時間なのか日付なのかを識別する必要があります。 (2005 年は年、T2005 または午後 8 時 05 分は時間です)
たとえば、次の表記は同等です。
- 20040204 = 2004-02-04 = 2004-W06-3 = 2004W063
最後のショートカットは、切り詰められた要素をハイフン「-」に置き換えることです。めったに使用されません。ただし、混乱を避けることが必要になる場合もあります。年を省略すると、12 月 2 日は次のようになります。
「 –1202 」。 1202 年を表す「 1202 」だけと混同することなく、これを「 -1202 」に減らすことができます。
2003—12または2003–12 は、2003 年の任意の月の 12 日を表します。2003 年 12 月を表す2003-12と混同することはありません。

期間と間隔
期間 (経過時間の測定) または時間間隔 (2 つの特定の日付の間) を指定することもできます。これを行うには、区切り文字としてスラッシュ「 / 」を使用します。

2 つの日付間の間隔
開始日と終了日はスラッシュで区切られます。最後の要素のみが変更される場合は、先頭を書き換えないことが可能です。いくつかの例:
- 2004-12-02T23:00/2005-01-01T12:30 : 2 つの異なる日付と時刻の間の期間。
- 2004-12-02T22:00/23:30 : 2004 年 12 月 2 日の午後 10 時から午後 11 時 30 分までの期間。
2004-12-02T22:00/2004-12-02T23:30: 完全な等価表記 - 2004-12-02T22:00/15 : 2004 年 12 月 2 日の午後 10 時から午後 10 時 15 分までの期間。
2004-12-02T22:00/2004-12-02T22:15: 同等の非省略表記 - 2004-12-02T22/23 : 2004 年 12 月 2 日午後 10 時から午後 11 時までの期間。
2004-12-02T22/2004-12-02T23: 同等の非省略表記 - 2004-12-02/05 : 2004 年 12 月 2 日から 5 日までの期間 (2 つの日付はゼロ時間制限として指定されているため、12 月 5 日は除外されることを理解してください)。
2004-12-02/2004-12-05: 同等の非省略表記 - T22:00/15 : 午後 10 時から午後 10 時 15 分までの間隔 (日付は文脈上既知であると想定されます)。
T22:00/T22:15: 同等の非省略表記 - T22/23 : 午後 10 時から午後 11 時までの間隔 (日付は文脈上既知であると想定されます)。
T22/T23: 同等の非省略表記
間隔
期間は、特定の瞬間から始まるのではなく、絶対的な時間を表します。文字「P」(英語のピリオド)で書き始める必要があります。例:
P18Y9M4DT11H9M8Sは、18 年 9 か月 4 日 11 時間 9 分 8 秒の (長い) 期間を表します。この例では、要素 ( Year 、 Months 、 Days 、 Hours 、 MinutesおよびSeconds ) を区切るために英語のイニシャルが使用されていることがわかります。私たちは日と時間を区切るTの存在にいつも気づきます。確かに、ここでは H、M、S の存在により T が冗長になります。文字「W」を再利用して週単位でカウントすることもできます。たとえば、 P3W は3 週間の期間を表します。
文脈上、正の期間と負の期間を区別する必要がある場合は、単に文章の先頭に「+」または「-」記号を追加します。
制限と期間
最後に、2 つの表記を組み合わせて、開始日と期間に従って期間を示すことができます。例: 2004-12-02/P3D 2004 年 12 月 2 日から始まる 3 日間続く時間間隔。
または、逆に、最初に期間を指定し、次に最終日付を指定することもできます (「PT1H/2006-01-01」は、2006 年の元旦に移行する前の時間を表します)。
期間の繰り返し
期間が繰り返される場合は、表記の前に文字 R が付けられます。例: R/PT01 は「毎時間」を意味します。
スラッシュ ‘/’ を使用すると、R の後に追加して (オプションで) 繰り返しの回数を示すことができます。したがって、 R5/PT01:30 は「1 時間半の間隔で 5 回発生」を意味します。
各発生の間の期間は、上記のすべての方法で示すことができます。 (2 つの日付を示すか、間隔または期間に記号 P を使用します。開始日または終了日の指定の有無にかかわらず。)
R12/1985-04-12T23:20:50/P1Y2M は、「1985 年 4 月 12 日午後 11 時 20 分 50 秒に最初の発生が始まり、1 年 2 か月ごとに 12 回発生した」ことを意味します。
利点
この標準化の利点は次のとおりです。
- ソフトウェアによる読み書きが簡単 (名前を翻訳する必要はありません)。
- 比較と並べ替えが簡単 (特定のコンテキストで固定フォーマットを維持)。
- 言語に依存しません。
- 他の表記法と混同する危険性がありません (またはほとんどありません)。
- 表記は小さく、サイズは一定です。
- 表記の日付と時刻の要素を直感的に理解できます。
