GoでEpochタイムスタンプを取得する方法

GoでのEpochタイムスタンプの操作。現在のUnix時間の取得、time.Timeとepochの変換、ナノ秒精度タイムスタンプの処理を解説。

Programming

詳細な説明

GoでのEpochタイムスタンプ

Goのtimeパッケージは、Unixタイムスタンプを扱うためのクリーンで明示的なメソッドを提供します。Goは秒、ミリ秒、マイクロ秒、ナノ秒の精度をサポートしています。

現在のEpochの取得

now := time.Now()
fmt.Println(now.Unix())       // 1705312200(秒)
fmt.Println(now.UnixMilli())  // 1705312200000(ミリ秒)
fmt.Println(now.UnixNano())   // 1705312200000000000(ナノ秒)

Epochからtime.Timeへの変換

t := time.Unix(1705312200, 0)
fmt.Println(t.UTC())  // 2024-01-15 09:30:00 +0000 UTC

カウントダウン計算

target := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)
remaining := time.Until(target)
days := int(remaining.Hours()) / 24

ベストプラクティス

  • エポックとの変換時は常にtime.UTC()を使用してタイムゾーンバグを回避
  • 秒にはtime.Unix()、ミリ秒にはtime.UnixMilli()を使用 — 手動で乗算しない
  • Goのtime.Timeのゼロ値は年1の1月1日であり、Unixエポックではない

ユースケース

API、データベース、メッセージキューでタイムスタンプを扱うGoサービスを構築する際にこのリファレンスを参照してください。

試してみる — Epoch Countdown

フルツールを開く