为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得时间戳之间的差异(字符串或 time.time 之间)

如何获得时间戳之间的差异(字符串或 time.time 之间)

Go
饮歌长啸 2023-06-19 15:45:48
我有一个问题:我需要知道 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



查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信