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

标签 datetime go 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但无法从中得到任何东西。

最佳答案

您可以使用 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 上的示例.

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

golang time.Since() with months and years

那里提出的解决方案通过显示一个带有签名的函数来解决这个问题:

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

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

关于datetime - 两个 time.Time 对象之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260599/

相关文章:

c# - Azure 上日期解析的意外行为

python - 将今天的日期与数据框中的日期进行比较

go - 如何记录请求正文(通过中间件)而不进行缓冲?

Python 仅减去一次 (HH :MM:SS) from a DateTime Column

java - 如何将时间戳插入 SQLite 数据库列?使用函数时间 ('now' )?

json - 使用查询在 Golang 中处理 API?

go - 如何帮助 Go 测试找到自定义类型声明?

java - 如何对包含年份的月份列表进行排序

c++ - 是否有平台不将 std::time_t 表示为 unix 时间?

ios - 如何使用 HealthKit 获取特定日期的 24 小时 sleep 数据?