TOMLの日付時刻型とJSON文字列
TOMLのネイティブ日付時刻型がJSON文字列にどのように変換されるかを学びます。オフセット日時、ローカル日時、ローカル日付、ローカル時刻を実践的な例とともに解説します。
Advanced TOML
詳細な説明
TOMLは、ファーストクラスの日付時刻サポートを持つ数少ない設定言語の一つです。すべての日付をプレーンな文字列として表現するJSONとは異なり、TOMLには言語仕様の一部として4つの異なる日付時刻型があります。
TOMLの日付時刻型:
# オフセット日時(タイムゾーン付きフルタイムスタンプ)
created = 2024-01-15T10:30:00Z
updated = 2024-06-20T14:45:00+09:00
# ローカル日時(タイムゾーンなし)
meeting = 2024-03-15T09:00:00
# ローカル日付(日付のみ)
birthday = 1990-05-20
# ローカル時刻(時刻のみ)
alarm = 07:30:00
JSONに変換すると(文字列として):
{
"created": "2024-01-15T10:30:00Z",
"updated": "2024-06-20T14:45:00+09:00",
"meeting": "2024-03-15T09:00:00",
"birthday": "1990-05-20",
"alarm": "07:30:00"
}
TOML日付時刻変換の重要なポイント:
- JSONには型情報がない。 JSONには日付型がないため、すべてのTOML日付時刻は文字列になります。オフセット日時とローカル日時の意味的な区別は失われます。
- ISO 8601形式が保持される。 文字列表現はISO 8601標準に従い、ほとんどの言語の日付ライブラリで解析可能です。
- TOMLは日付時刻構文を検証する。 JSON(任意の文字列が有効)とは異なり、TOMLパーサーは
2024-13-40のような不正な日付を拒否します。この検証はJSONでは失われます。
TOMLの日付時刻セパレータ:
# 両方とも有効なTOML:
dt1 = 2024-01-15T10:30:00Z
dt2 = 2024-01-15 10:30:00Z # スペースセパレータも許可
両方とも同じJSON文字列を生成します。T セパレータはJSON/ISO 8601の標準です。
JSON日付をTOMLに戻す変換:
JSONからTOMLに変換する際、日付のような文字列をネイティブTOML日付時刻値に変換できます:
"2024-01-15T10:30:00Z"は2024-01-15T10:30:00Z(クォートなし、ネイティブ日時)になる"2024-01-15"は2024-01-15(クォートなし、ネイティブローカル日付)になる"not-a-date"は"not-a-date"(クォート付き文字列)のまま
スマートなコンバーターはISO 8601パターンを検出してネイティブTOML型を使用し、結果のTOMLファイルの型安全性を向上させます。
ユースケース
スケジュールされたタスク、APIレート制限ウィンドウ、証明書の有効期限などをTOML形式で設定する場合。ネイティブの日付時刻検証が無効な日付値を防止し、API消費のためにJSONに変換する場面で使用します。