基礎知識 · 日付と時刻
ISO 8601 の日付形式とは?
結論
ISO 8601 は、日付と時刻をテキストで書くための国際規格です。基本形は単位を大きいものから小さいものへ並べ、日付は 2026-10-14、UTC オフセット付きの瞬間は 2026-10-14T09:30:00+02:00 と書きます。ほかにも 2026-W42-3 のような週日付、年間通算日、P3DT4H のような期間を定めています。あいまいさがなく、文字列として並べ替えると時間順になるため、ほとんどの API やデータ形式で使われています。
なぜ YYYY-MM-DD なのか
03/04/2026 は世界の多くの地域では4月3日、米国では3月4日です。ISO 8601 は、年・月・日の順に固定し、年は4桁、月と日はゼロ埋めの2桁にすることで、この推測を不要にしました。
もう1つの利点は並べ替えです。YYYY-MM-DD 形式の文字列は、文字列として並べ替えると日付そのものと同じ順になるので、2026-10-14-report.pdf のようなファイル名はどのフォルダーでも正しく並びます。
| 形式 | 拡張形式(区切りあり) | 基本形式(区切りなし) |
|---|---|---|
| 暦日付 | 2026-10-14 | 20261014 |
| 年間通算日付 | 2026-287 | 2026287 |
| 週日付 | 2026-W42-3 | 2026W423 |
| 時刻 | 09:30:00 | 093000 |
| UTC の日時 | 2026-10-14T09:30:00Z | 20261014T093000Z |
| オフセット付きの日時 | 2026-10-14T11:30:00+02:00 | 20261014T113000+0200 |
時刻、タイムゾーン、そして Z
時刻は日付のあとに T を挟んで書きます。時は 24 時間制で、秒の小数部は小数点のあとに続けます:09:30:00.250。
Z(「ズールー」と読む)は UTC の時刻であることを示します:2026-10-14T09:30:00Z。+02:00や-05:00のようなオフセットは、ローカル時刻と、それが UTC からどれだけずれているかを示します。2026-10-14T11:30:00+02:00は上の UTC の例と同じ瞬間です。Zもオフセットもない時刻は、タイムゾーン不明のローカル時刻です。ISO 8601 としては有効ですが、他のシステムからはどの瞬間を指すのかわかりません。
オフセットはタイムゾーンではありません。+01:00 は冬のパリかもしれないし、一年中のラゴスかもしれません。ISO 8601 が記録するのはオフセットだけで、タイムゾーンのルールは IANA タイムゾーンデータベースなど別のところから得ます。
週日付と週番号
ISO の週は月曜日に始まり、第1週はその年の最初の木曜日を含む週(言い換えれば1月4日を含む週)です。週日付は、年、W、週番号、曜日(1 = 月曜日〜7 = 日曜日)の順に書きます。
週が年をまたいで分割されないため、年の境目では ISO の週番号年が暦年と異なることがあります。
| 暦日付 | ISO 週日付 | 理由 |
|---|---|---|
| 2021-01-01(金曜日) | 2020-W53-5 | 2020年12月28日(月)に始まった週に属する |
| 2024-12-30(月曜日) | 2025-W01-1 | その週に2025年1月2日(木)が含まれる |
| 2026-01-01(木曜日) | 2026-W01-4 | 1月1日自体が木曜日 |
| 2027-01-01(金曜日) | 2026-W53-5 | 2026年は木曜日に始まるので 53 週ある |
1年は 52 週か 53 週です。米国のカレンダーの週番号は日曜日始まりで、1月1日が常に第1週になることが多く、ISO の週番号と1つずれることがあります。
期間と時間間隔
期間は P(period)で始めます。日付の部分を先に書き、T を挟んで時刻の部分を書きます。ゼロの部分は省略できます。
| 期間 | 意味 |
|---|---|
P3DT4H | 3日と4時間 |
PT30M | 30分 |
P30M | 30分ではなく30か月。T の有無が重要 |
P1Y2M10D | 1年2か月10日 |
P2W | 2週間 |
PT0.5S | 0.5秒 |
時間間隔は2つの部分をスラッシュでつなぎます:2026-10-14/2026-10-20(開始と終了)、2026-10-14T09:00Z/PT2H(開始と期間)、P1D/2026-10-14(期間と終了)。年や月の期間は秒数に換算した長さが一定でないため、ソフトウェアは決まった秒数としてではなく、カレンダー上で加算します。
RFC 3339:Web 向けの厳格なプロファイル
ISO 8601 は多くのバリエーションを認めているため、完全なパーサーは複雑になります。RFC 3339 はインターネットのプロトコル向けに1つのプロファイルを選んでおり、ほとんどの JSON API、Atom フィード、ログ形式がこれに従っています。
- 日付と時刻の両方が必須で、常に拡張形式で書きます:
2026-10-14T09:30:00Z。 - すべてのタイムスタンプに
Zか、+02:00のような数値のオフセットが必要です。オフセットのないローカル時刻は認められません。 - 週日付、年間通算日付、期間はこのプロファイルに含まれません。
-00:00は、時刻は UTC だが元のローカルのオフセットは不明であることを示します。- RFC は、読みやすさのために
Tの代わりにスペースを使ってもよいとしており、多くのデータベースはこの形式で出力します。
よくある質問
ISO 8601 の日付にある T は何を意味しますか?
T は日付と時刻の区切りで、2026-10-14T09:30:00 のように使います。RFC 3339 では、読みやすさのためにその位置にスペースを置くことも認められています。
タイムスタンプの末尾の Z は何を意味しますか?
Z は時刻が UTC、つまりオフセットがゼロであることを示します。09:30:00Z と 09:30:00+00:00 は同じ瞬間を表します。
ISO 8601 と RFC 3339 は同じものですか?
RFC 3339 は、インターネットで使うために ISO 8601 をより厳格に絞り込んだサブセットです。RFC 3339 のタイムスタンプはすべて ISO 8601 として有効ですが、ISO 8601 には週日付や期間など、RFC 3339 が認めない形式もあります。
ISO 8601 ではどの週が第1週ですか?
その年の最初の木曜日を含む、月曜日から日曜日までの週が第1週です。そのため1月1日が前年の第 52 週や第 53 週に入ることもあります。