假設我有以下內容:Postgres 數據庫中帶有列的表TIMESTAMP。數據庫時區設置為 UTC 以外的時間。一些使用CURRENT_TIMESTAMPor插入時間戳值的 SQL 語句NOW()正如 Postgres 文檔中所述:CURRENT_TIMESTAMP() 函數返回一個帶有時區的 TIMESTAMP,表示事務開始的日期和時間。因此,以下語句默默地將本地時間戳轉換為絕對時間戳:INSERT INTO foo (id, timestamp_column) VALUES (0, CURRENT_TIMESTAMP);假設 Go 程序將此數據讀入一個time.Time對象,該對象將有一個空Location:fmt.Println(timeFromDb.Location().String() == "") // true它被解釋為 UTC。此時我確實知道 Go 時間timeFromDb實際上不是 UTC,而且我也知道數據庫時區設置是什么。如何在這個時間對象中設置正確的時區?在實踐中:// beforefmt.Println(timeFromDb) // 2009-11-10 10:00:00fmt.Println(timeFromDb.Location()) // <empty>fmt.Println(timeFromDb.UTC()) // 2009-11-10 10:00:00// magic?// afterfmt.Println(timeFromDb) // 2009-11-10 10:00:00fmt.Println(timeFromDb.Location()) // America/Vancouverfmt.Println(timeFromDb.UTC()) // 2009-11-10 18:00:00
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
你可以重新解釋一下:
loc,_:=time.LoadLocation("America/Vancouver")
t2:=timeFromDb.In(loc)
_,off:=t2.Zone()
theTime:=t2.Add(-time.Duration(off)*time.Second)
您還可以進行一些字符串操作,但我懷疑這更快。
- 1 回答
- 0 關注
- 116 瀏覽
添加回答
舉報
0/150
提交
取消