douzhang1115 2019-05-21 14:49
浏览 330
已采纳

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

This question already has an answer here:

I have one problem: I need to know the difference/duration between two timestamps in golang. Therefore, I use the time library (https://golang.org/pkg/time/).

If I have two timestamps of type "time.time", it is easy to get the difference using "time.Sub()". My problem is that one of my timestamps comes from another function and it is only possible to transfer it as a string:

t1 := "2009-11-10 23:00:00 +0000 UTC m=+0.000000001" //type: string

t2 := time.Now() //type: time.time

Now I have to basic possibilities:

A) Convert t2 to a string as well and try to find out the difference between two strings (UGLY)

B) Convert t1 from type "string" to type "time.time" and then apply "time.Sub()"

I want to go way B). Therefore, I found out that

time.Parse(format, timestring)

should be able to do so. So I tried to convert t1 using

t1_time, err := time.Parse(time.RFC3339, t1)

but the result was not as expected! Instead I got this

0001-01-01 00:00:00 +0000 UTC

and the error saying "error parsing time "2009-11-10 23:00:02 +0000 UTC m=+2.000000001" as "2006-01-02T15:04:05Z07:00": cannot parse " 23:00:02 +0000 UTC m=+2.000000001" as "T" ".

If I use my own timeformat which is the same as t1

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

t1_time, err := time.Parse(timeformat , t1)

the result stays wrong and I get the error saying"error parsing time "2009-11-10 23:00:02 +0000 UTC m=+2.000000001" as "2009-11-10 23:00:00 +0000 UTC m=+0.000000001": cannot parse "9-11-10 23:00:02 +0000 UTC m=+2.000000001" as "009-" ".

I also tried to go over UNIX time but the time library does not allow me to convert a string into unix.

What do I do wrong??! Why is the parsing not working? Thanks for any help!

</div>
  • 写回答

1条回答 默认 最新

  • duanbiao4035 2019-05-21 15:24
    关注

    Basically you want:

        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))
    

    If you really want the monotonic delta included, that number would have to be parsed manually and the delta applied to t1.

    Playground version.

    Note: playground version will show a duration of zero - as the playground's clock starts on Nov 11 2009 - the seminal birthdate of go.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿