タイムゾーンとISO 8601 — ソフトウェアの日付フォーマット標準

ISO 8601がZサフィックスとオフセット表記でタイムゾーンをどのように扱うかを学びます。APIとデータベースでタイムゾーン情報付き日付をフォーマットする正しい方法を理解します。

Concepts

詳細な説明

ISO 8601とタイムゾーン表現

ISO 8601は、日付と時刻の表現に関する国際標準です。API、データベース、データ交換で最も広く使用されているフォーマットです。

基本フォーマット

2024-03-15T14:30:00Z              # UTC(Zulu時間)
2024-03-15T14:30:00+00:00         # 明示的オフセット付きUTC
2024-03-15T09:30:00-05:00         # 米国東部(冬)
2024-03-15T23:30:00+09:00         # 日本標準時
2024-03-15T20:00:00+05:30         # インド標準時

"Z"サフィックス

末尾のZは「Zulu時間」を表し、UTCの軍事的呼称です。+00:00と同等です。

ISO 8601に含まれないもの

ISO 8601には以下が含まれません:

  • タイムゾーンIDAmerica/New_York)— オフセットのみ
  • タイムゾーン略称ESTPST)— 曖昧で非標準
  • DST情報 — オフセットはDSTが有効な場合に反映しますが、明示的には示しません

そのため、ISO 8601タイムスタンプとIANAタイムゾーンIDの両方を保存する必要があることが多いです:

{
  "scheduledAt": "2024-03-15T14:30:00-05:00",
  "timezone": "America/New_York"
}

JavaScriptとISO 8601

// パース
const d = new Date("2024-03-15T14:30:00Z");  // 常にUTC

// 生成
d.toISOString();  // "2024-03-15T14:30:00.000Z"(常にZ付きUTC)

// タイムゾーン付き
d.toLocaleString("en-US", {
  timeZone: "America/New_York",
  dateStyle: "full",
  timeStyle: "long",
});
// "Friday, March 15, 2024 at 10:30:00 AM EDT"

ユースケース

ISO 8601はほとんどのREST API、JSONデータ交換、データベースのタイムスタンプカラム、ログファイルエントリ、設定ファイルで必須のフォーマットです。タイムゾーン情報のエンコード方法を理解することで、タイムスタンプがシステム境界を越える際のパースエラー、不正な時刻表示、データ損失を防ぎます。

Try It — Timezone Reference

フルツールを開く