ISO 8601 日付フォーマット

APIやデータベースで使用されるISO 8601日時フォーマットを完全解説。構文、タイムゾーンの扱い、複数言語でのパース方法を学べます。

Format

2024-01-15T09:30:00Z

詳細な説明

ISO 8601は、日時を文字列として表現するための国際標準です。そのフォーマットは曖昧さがなく、ソート可能で、パーサーに広く理解されています。最も一般的な形式はYYYY-MM-DDTHH:mm:ssZで、Tは日付と時刻を区切り、ZはUTCを示します。

フォーマットのバリエーション:

日付のみ:         2024-01-15
日時:            2024-01-15T09:30:00
UTCあり:         2024-01-15T09:30:00Z
オフセットあり:    2024-01-15T09:30:00+05:30
ミリ秒あり:       2024-01-15T09:30:00.123Z
週日付:          2024-W03-1  (第3週、月曜日)
年通算日:        2024-015    (2024年の15日目)

開発者にとって重要な理由:

ISO 8601文字列は辞書順にソートすると時系列順と一致するため、ファイル名、ログエントリ、データベースインデックスに最適です。このフォーマットはJavaScriptのDate.toISOString()のデフォルト出力であり、ほとんどのフレームワークにおけるJSONシリアライズや、PostgreSQLのtimestamptz表示にも使用されます。

各言語でのパース:

// JavaScript
new Date("2024-01-15T09:30:00Z")
# Python 3.7+
from datetime import datetime
datetime.fromisoformat("2024-01-15T09:30:00+00:00")

よくある落とし穴:

末尾のZは多くのパーサーで省略不可であり、UTCを明示的に意味します(軍事タイムゾーンの「Zulu time」に由来)。タイムゾーンを完全に省略すると、パーサーがローカル時刻を仮定する場合があり、サーバー間で不整合が生じます。また、JavaScriptのDateコンストラクタは2024-01-15のような日付のみの文字列をUTCとしてパースしますが、タイムゾーンなしの日時文字列はローカル時刻としてパースします。この不一致は無数のバグの原因となっています。

ベストプラクティス: 日付は常にISO 8601形式で明示的なタイムゾーン指定子を付けて保存・送信してください。ローカル時刻への変換は、フロントエンドの表示レイヤーでのみ行います。

ユースケース

ISO 8601はREST APIのリクエストおよびレスポンスボディの標準フォーマットであり、異なるタイムゾーンにいるクライアントとサーバーが日時を同一に解釈することを保証します。

Try It — Timestamp Converter

フルツールを開く