一尘不染

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

go

‘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,但什么都做不了。


阅读 202

收藏
2020-07-02

共1个答案

一尘不染

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

打印时,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上尝试示例。

当然,这仅在时差少于一天的情况下有效。如果差异可能更大,那就另当别论了。结果必须包括几天,几个月和几年。复杂性显着增加。

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

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

即使您的时间在24小时之内(在这种情况下yearmonthday将是0),您也可以使用它。

2020-07-02