Go time.Formatと参照時刻アプローチ

Goの日付フォーマットにおけるユニークな参照時刻アプローチを理解。'Mon Jan 2 15:04:05 MST 2006'がマジックリファレンスである理由とカスタムレイアウトの書き方。

Language-Specific

詳細な説明

Goの参照時刻アプローチ

Goは他のすべての主流言語とは根本的に異なる日付フォーマットアプローチを採用しています。YYYY%Yのような抽象的なトークンの代わりに、Goは特定の参照時刻を目的のレイアウトでフォーマットします。

マジック参照時刻

Mon Jan 2 15:04:05 MST 2006

各コンポーネントはユニークになるよう選ばれた特定の数字です:

  • 1(または01)— 月(January = 1)
  • 2(または02)— 日
  • 3(または0315)— 時(3 PM = 15:00)
  • 4(または04)— 分
  • 5(または05)— 秒
  • 6(または062006)— 年
  • 7-0700内)— タイムゾーンオフセット

なぜこのアプローチなのか?

Goチームはフォーマット文字列自体が有効で読みやすい日付になるようこのシステムを設計しました。"2006-01-02"を見ると、出力が"2026-02-28"のようになることがすぐにわかります。

定義済みレイアウト

定数 レイアウト
time.RFC3339 2006-01-02T15:04:05Z07:00
time.RFC1123 Mon, 02 Jan 2006 15:04:05 MST
time.ANSIC Mon Jan _2 15:04:05 2006

よくある落とし穴

  1. パディング02はゼロパディング、2はパディングなし、_2はスペースパディング
  2. 12h vs 24h3または03は12時間制、15は24時間制
  3. タイムゾーン-0700は数値オフセット、MSTは略語、Z0700はZ形式のUTC

ユースケース

Goの時間フォーマットはCLIツール、Kubernetesオペレーターのタイムスタンプ、RESTサーバー(Gin、Echo、Fiber)、クラウドネイティブアプリケーションのログフォーマット、Prometheusメトリクスのタイムスタンプ、Terraformプロバイダーの日付処理で使用されます。

試してみる — Date Format Reference & Tester

フルツールを開く