我有一個問題:我需要知道 golang 中兩個時間戳之間的差異/持續時間。因此,我使用時間庫 ( https://golang.org/pkg/time/ )。如果我有兩個“time.time”類型的時間戳,使用“time.Sub()”很容易得到差異。我的問題是我的一個時間戳來自另一個函數,并且只能將其作為字符串傳輸:t1 := "2009-11-10 23:00:00 +0000 UTC m=+0.000000001" //類型:字符串t2 := time.Now() //類型:time.time現在我有基本的可能性:A) 也將 t2 轉換為字符串并嘗試找出兩個字符串之間的區別(丑陋)B) 將 t1 從類型“string”轉換為類型“time.time”,然后應用“time.Sub()”我想走B)。因此,我發現time.Parse(格式,時間字符串)應該可以這樣做。所以我嘗試使用轉換 t1t1_time, 錯誤:= time.Parse(time.RFC3339, t1)但結果并不如預期!相反,我得到了這個0001-01-01 00:00:00 +0000 UTC并且錯誤說“錯誤解析時間”2009-11-10 23:00:02 +0000 UTC m=+2.000000001“作為”2006-01-02T15:04:05Z07:00“:無法解析”23:00:02 +0000 UTC m=+2.000000001" 為 "T" "。如果我使用與 t1 相同的自己的時間格式時間格式:=“2009-11-10 23:00:00 +0000 UTC m=+0.000000001”t1_time, err := time.Parse(小時格式, t1)結果仍然錯誤,我收到錯誤消息“錯誤解析時間”2009-11-10 23:00:02 +0000 UTC m=+2.000000001“作為”2009-11-10 23:00:00 +0000 UTC m= +0.000000001”:無法將“9-11-10 23:00:02 +0000 UTC m=+2.000000001”解析為“009-”。我也嘗試過 UNIX 時間,但時間庫不允許我將字符串轉換為 unix。我做錯了什么??!為什么解析不起作用?謝謝你的幫助!
1 回答

慕后森
TA貢獻1802條經驗 獲得超5個贊
基本上你想要:
t1_raw := "2009-11-10 23:00:00 +0000 UTC m=+0.000000001"
format := "2006-01-02 15:04:05 -0700 MST"
// for simplicity t1_raw[:29] discards time's monotonic delta
// i.e. the " m=+0.000000001" suffix
t1, err := time.Parse(format, t1_raw[:29])
if err != nil {
log.Fatal(err)
}
log.Println("Duration ->", t2.Sub(t1))
如果您真的想要包含單調增量,則必須手動解析該數字并將增量應用于t1
.
游樂場版本。
注意: playground 版本將顯示持續時間為零 - 因為 playground 的時鐘開始于Nov 11 2009
- 的開創性生日go
。
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消