Go Snippets

Go Unix 時間戳程式碼片段

Go 範例,涵蓋 Unix 秒、毫秒、奈秒,將時間戳轉換為 time.Time,以及用 RFC3339 或自訂版面格式化。

Current Unix timestamp (seconds)
package main

import "time"

func main() {
    ts := time.Now().Unix()
}
Current Unix timestamp (milliseconds)
time.Now().UnixMilli()
Current Unix timestamp (nanoseconds)
time.Now().UnixNano()
time.Time from Unix timestamp
import "time"

t := time.Unix(1700000000, 0)
t.UTC()  // ensure UTC
Formatted string
import "time"

t := time.Unix(1700000000, 0)
t.Format(time.RFC3339)          // "2023-11-15T06:13:20Z"
t.Format("2006-01-02 15:04:05") // custom layout
Timestamp from time.Time
import "time"

t, _ := time.Parse(time.RFC3339, "2023-11-15T06:13:20Z")
t.Unix()

Go 時間戳記基礎

Go 的 time 套件為 Unix 秒、毫秒和奈秒提供了直接的輔助函式。秒用 time.Now().Unix(),與 JavaScript 相容的毫秒用 time.Now().UnixMilli()。

格式化 time.Time 值

用 time.Unix(seconds, 0) 從 Unix 秒建立 time.Time,然後在需要確定性輸出時呼叫 UTC()。對於 API 回應,RFC3339 通常是最佳的字串格式。

Go 生產注意事項

Go 的 time.Time 攜帶一個位置(location),但 Unix 時間戳記始終表示單一的 UTC 時刻。在 API 和資料庫邊界對時間戳記進行正規化,然後在使用者或業務規則需要本地時間時用明確的位置進行格式化。這能讓比較保持簡單,並防止伺服器本地設定改變輸出。

  • 日誌、佇列和資料庫欄位中的 Unix 秒用 time.Now().Unix()
  • 與 JavaScript 相容的值用 time.Now().UnixMilli()
  • 在格式化確定性字串之前用 time.Unix(seconds, 0).UTC()
  • API 回應用 time.RFC3339 或 time.RFC3339Nano

FAQ

應該儲存 time.Time 還是 Unix 秒?
當你需要日曆操作時,在 Go 內部使用 time.Time。當值需要被索引、查詢或與其他系統共享時,儲存 Unix 秒或資料庫時間戳記型別。
time.Unix 期望什麼單位?
time.Unix 期望把秒和奈秒作為分開的參數。如果你收到的是毫秒,請在呼叫 time.Unix 之前拆分或轉換該值。
如何驗證 Go 的輸出?
用 t.UTC().Format(time.RFC3339) 格式化該值,並把它與你寫入的 API、佇列或資料庫欄所期望的時間戳記比較。