亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 中的 RFC3339 時間解析

golang 中的 RFC3339 時間解析

Go
慕婉清6462132 2022-01-17 19:56:52
我正在從數據庫中提取時間戳,它使用 RFC3339 格式,但缺少時區。因此,當我嘗試比較時間戳時,它將關閉。如何將 dbtime 更改為東部時間?// time formatconst(    RFC3339     = "2006-01-02T15:04:05Z07:00")//now timenow := time.Now()nowtime := now.Unix()fmt.Println("Nowtime:", nowtime)fmt.Println("Now:", now)//time in dbfmt.Println("Dbtime string:", dbtime)udbtime, err := time.Parse.EST(RFC3339,dbtime)fmt.Println("RFC3339: " + RFC3339)fmt.Println("dbtime parsed", udbtime)fmt.Println("dbtime parsed unixtime", udbtime.Unix())我的輸出是Nowtime: 1466443640Now: 2016-06-20 13:27:20.963232824 -0400 EDTDbtime string: 2016-06-20T12:41:45.14ZRFC3339: 2006-01-02T15:04:05Z07:00dbtime parsed 2016-06-20 12:41:45.14 +0000 UTCdbtime parsed unixtime 1466426505
查看完整描述

2 回答

?
慕村225694

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


查看完整回答
反對 回復 2022-01-17
?
守著一只汪

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


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 424 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號