タイムゾーンと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には以下が含まれません:
- タイムゾーンID(
America/New_York)— オフセットのみ - タイムゾーン略称(
EST、PST)— 曖昧で非標準 - 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データ交換、データベースのタイムスタンプカラム、ログファイルエントリ、設定ファイルで必須のフォーマットです。タイムゾーン情報のエンコード方法を理解することで、タイムスタンプがシステム境界を越える際のパースエラー、不正な時刻表示、データ損失を防ぎます。