非常新的’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。
您可以使用Time.Sub()来获取 2 个time.Time值之间的差值,结果将为 的值time.Duration。
Time.Sub()
time.Time
time.Duration
打印时,atime.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()像这样使用它的方法:
HH:mm:ss
Time.Format()
out := time.Time{}.Add(diff) fmt.Println(out.Format("15:04:05"))
00:05:41
试试Go Playground上的例子。
当然,这只适用于时差小于一天的情况。如果差异可能更大,那就是另一回事了。结果必须包括天、月和年。复杂性显着增加。
那里提出的解决方案通过显示带有签名的函数解决了这个问题:
func diff(a, b time.Time) (year, month, day, hour, min, sec int)
您可以使用,即使你的时间是在24小时内(在这种情况下year,month和day会0)。
year
month
day
0