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

时间:2019-05-21 14:49:41

标签: string parsing go time timestamp

我有一个问题:我需要知道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从“字符串”类型转换为“ time.time”类型,然后应用“ time.Sub()”

我想走B路)。因此,我发现

  

time.Parse(格式,时间字符串)

应该能够这样做。所以我尝试使用

转换t1
  

t1_time,err:= 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相同的时间格式

  

timeformat:=“ 2009-11-10 23:00:00 +0000 UTC m = + 0.000000001”

     

t1_time,err:= time.Parse(timeformat,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 个答案:

答案 0 :(得分:0)

基本上你想要的:

    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

游乐场version

注意:游乐场版本的持续时间为零-游乐场的时钟从Nov 11 2009开始,即go的出生日期。