2 回答

TA貢獻1880條經驗 獲得超4個贊
您可以使用所顯示的定義解析時間戳time.RFC3339,并在事后通過添加 UTC 偏移量來調整它們,以便它們在 UTC 中是正確的。
udbtime = udbtime.Add(4*time.Hour)
但是,這要求您檢查每次是否落在 EST 或 EDT 中以添加正確的偏移量,除非您可以假設它們都是 EDT。
更好的方法是使用您自己的時間格式而不使用特定的 TZ 偏移量(Z 不是用于解析的時間規范的一部分),并使用time.ParseInLocation.
這樣,您可以根據時間是 EST 還是 EDT 來計算正確的偏移量。
https://play.golang.org/p/IrUnTwvlkk
RFC3339local := "2006-01-02T15:04:05Z"
loc, err := time.LoadLocation("America/New_York")
if err != nil {
log.Fatal(err)
}
ts1 := "2016-06-20T12:41:45.14Z"
t1, _ := time.ParseInLocation(RFC3339local, ts1, loc)
fmt.Println(t1)
// prints: 2016-06-20 12:41:45.14 -0400 EDT
ts2 := "2016-01-20T12:41:45.14Z"
t2, _ = time.ParseInLocation(RFC3339local, ts2, loc)
fmt.Println(t2)
// prints: 2016-01-20 12:41:45.14 -0500 EST

TA貢獻1872條經驗 獲得超4個贊
你可以試試 go-carbon,一個簡單的、語義化的、對開發者友好的 golang 日期時間包
carbon.Parse("2020-12-31").ToRfc3339String()
// output
2020-12-31T00:00:00+08:00
https://github.com/golang-module/carbon
- 2 回答
- 0 關注
- 424 瀏覽
添加回答
舉報