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