Golangでミリ秒をtime.Timeに変換する方法
Min-jun Kim
Dev Intern · Leapcell

Go(Golang)では、特にUnixエポック(1970年1月1日)からの時間をミリ秒で表すシステムやデータとやり取りする場合、時間をミリ秒単位で処理することは一般的な要件です。この記事では、ミリ秒をGoのtime.Time型に変換する方法、およびその逆の変換方法について包括的なガイドを提供し、時間の操作における精度と容易さを保証します。
Key Takeaways
- ミリ秒を
time.Time
に変換 –time.Unix(0, millis * int64(time.Millisecond))
またはtime.UnixMilli(millis)
を使用します。 time.Time
をミリ秒に変換 – 直接変換するにはt.UnixMilli()
を使用します。- JSONミリ秒タイムスタンプを処理 – タイムスタンプを
int64
として保存し、time.UnixMilli()
を使用して変換します。
ミリ秒をtime.Time
に変換
Unixエポックからのミリ秒をGoのtime.Time
オブジェクトに変換するには、time.Unix
関数を使用できます。この関数は、秒とナノ秒の2つのパラメータを受け入れます。1ミリ秒は1,000,000ナノ秒に相当するため、ミリ秒の値から秒と残りのナノ秒を計算できます。
変換を実行する方法は次のとおりです。
package main import ( "fmt" "time" ) func main() { // Unixエポックからのミリ秒 millis := int64(1610000000000) // ミリ秒をtime.Timeに変換 t := time.Unix(0, millis*int64(time.Millisecond)) fmt.Println("変換された時間:", t) }
解説
millis*int64(time.Millisecond)
はミリ秒をナノ秒に変換します。time.Unix(0, nanoseconds)
は、Unixエポックからの指定されたナノ秒に対応するtime.Time
オブジェクトを作成します。 Goバージョン1.17以降では、標準ライブラリにtime.UnixMilli
関数が導入され、この変換が簡素化されました:
t := time.UnixMilli(millis)
この関数は、Unixエポックからの指定されたミリ秒に対応する time.Time
オブジェクトを直接返します。
time.Time
をミリ秒に変換
time.Time
オブジェクトがあり、Unixエポックからのミリ秒を取得する必要がある場合は、UnixMilli
メソッドを使用できます。
package main import ( "fmt" "time" ) func main() { // 現在時刻 t := time.Now() // time.TimeをUnixエポックからのミリ秒に変換 millis := t.UnixMilli() fmt.Println("エポックからのミリ秒:", millis) }
ミリ秒を含むJSONの処理
ミリ秒単位のタイムスタンプを含むJSONデータを操作する場合、構造体を定義して、ミリ秒を int64
フィールドにアンマーシャルし、それを time.Time
に変換できます。
package main import ( "encoding/json" "fmt" "time" ) type Event struct { Name string `json:"name"` Timestamp int64 `json:"timestamp"` } func (e *Event) Time() time.Time { return time.UnixMilli(e.Timestamp) } func main() { data := []byte(`{"name": "サンプルイベント", "timestamp": 1610000000000}`) var event Event if err := json.Unmarshal(data, &event); err != nil { fmt.Println("エラー:", err) return } fmt.Println("イベント名:", event.Name) fmt.Println("イベント時間:", event.Time()) }
FAQs
Go 1.17以降では time.UnixMilli(millis)
を使用するか、古いバージョンでは time.Unix(0, millis * int64(time.Millisecond))
を使用します。
time.Time
オブジェクトで t.UnixMilli()
を呼び出して、Unixエポックからのミリ秒を取得します。
タイムスタンプを int64
として保存し、JSONデータの読み取り時に time.UnixMilli()
を使用して変換します。
結論
Goでのミリ秒と time.Time
の間の変換は簡単で、特にGo 1.17で導入された機能強化により簡単になりました。time.UnixMilli
などの関数や、UnixMilli
などのメソッドを利用することで、時間の変換を効率的かつ正確に処理できます。
詳細については、time
パッケージに関するGoのドキュメントを参照してください。
Goプロジェクトをホストするための最適な選択肢であるLeapcellをご紹介します。
Leapcellは、ウェブホスティング、非同期タスク、Redisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い - リクエストも料金もなし。
比類のないコスト効率
- アイドル料金なしの従量課金。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高パフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ