两个 time.Time 对象之间的差异

新手上路,请多包涵

“Go”的新手。问题可能是基本问题。

我有两个 time.Time 对象,我想在小时/分钟/秒方面获得两者之间的差异。让我们说:

 t1 = 2016-09-09 19:09:16 +0530 IST
t2 = 2016-09-09 19:09:16 +0530 IST

在上面的例子中,因为差异是 0。它应该给我 00:00:00。考虑另一种情况:

 t1 = 2016-09-14 14:12:48 +0530 IST
t2 = 2016-09-14 14:18:29 +0530 IST

在这种情况下,差异为 00:05:41。我查看了 https://godoc.org/time 但无法从中得出任何结论。

原文由 Hemant Bhargava 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 811
2 个回答

您可以使用 Time.Sub() 获取 2 time.Time 值之间的差异,结果将是 time.Duration 的值。

打印时,a time.Duration “智能地”格式化自身:

 t1 := time.Now()
t2 := t1.Add(time.Second * 341)

fmt.Println(t1)
fmt.Println(t2)

diff := t2.Sub(t1)
fmt.Println(diff)

输出:

 2009-11-10 23:00:00 +0000 UTC
2009-11-10 23:05:41 +0000 UTC
5m41s

如果你想要时间格式 HH:mm:ss ,你可以构造一个 time.Time 值并使用它的 Time.Format() 方法,如下所示:

 out := time.Time{}.Add(diff)
fmt.Println(out.Format("15:04:05"))

输出:

 00:05:41

尝试 Go Playground 上的示例。

当然,这只有在时差小于一天的情况下才有效。如果差异可能更大,那就是另一回事了。结果必须包括日、月和年。复杂性显着增加。有关详细信息,请参阅此问题:

golang time.Since() 有几个月和几年

此处提供的解决方案通过显示带有签名的函数解决了这个问题:

 func diff(a, b time.Time) (year, month, day, hour, min, sec int)

You may use that even if your times are within 24 hours (in which case year , month and day will be 0 ).

原文由 icza 发布,翻译遵循 CC BY-SA 3.0 许可协议

实际上, time 包的文档确实讨论了它:

https://godoc.org/time#Time.Sub

https://godoc.org/time#Duration.Hours

You should produce a Duration object using Sub() and then use one of the Seconds() , Minutes() , Hours() .

 package main

import (
        "fmt"
        "time"
)

func main() {
        t1 := time.Date(1984, time.November, 3, 13, 0, 0, 0, time.UTC)
        t2 := time.Date(1984, time.November, 3, 10, 0, 0, 0, time.UTC)
        fmt.Printf("The hours difference is: %f", t1.Sub(t2).Hours())
}

原文由 Shmulik Klein 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题