我有一个问题:我需要知道戈朗两个时间戳之间的区别/持续时间。因此,我使用时间库(https://golang.org/pkg/time/)。
如果我有两个"time.time“类型的时间戳,那么使用"time.Sub()”很容易得到区别。我的问题是,我的时间戳之一来自另一个函数,它只能以字符串的形式传输:
t1 := "2009-11-10 23:00:00 +0000 UTC m=+0.000000001“//type: string t2 := time.Now() //type: time.time
现在我要讲的是基本的可能性:
( A)将t2转换为字符串,并试图找出两个字符串(丑陋)之间的区别。
B)将t1从"string“类型转换为"time.time”类型,然后应用"time.Sub()“
我想走B路)。因此,我发现
Time.Parse(格式,时间字符串)
应该能够做到这一点。因此,我尝试使用
t1_time,err := time.Parse(time.RFC3339,t1)
但结果并不像预期的那样!相反,我得到了这个
0001-01-01 :00:00 +0000协调世界时
“错误解析时间"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 +0000 UTC m=+0.000000001":无法将"9-11-10 23:00:02 +0000 UTC m=+2.000000001“解析为"009-”。
我还试图浏览unix time,但是时间库不允许我将字符串转换为UNIX。
我做错什么了?!为什么解析不起作用?谢谢你的帮助!
发布于 2019-05-21 07:24:20
基本上你想:
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
。
操场版本。
注意:游乐场版本将显示持续时间为零--当操场的时钟从Nov 11 2009
开始时-- go
的开创性生日。
https://stackoverflow.com/questions/56240944
复制相似问题