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サービスを構築する際にこのリファレンスを参照してください。