当前位置: 首页 > 面试题库 >

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

阚乐湛
2023-03-14
问题内容

‘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上尝试示例。

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

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

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

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



 类似资料:
  • 问题内容: 如何分辨两个datetime物体之间的时间差(以分钟为单位)? 问题答案: 从第一次减去以后的时间将创建一个仅保留时差的对象。在上面的示例中,它是0分钟,8秒和562000微秒。

  • 问题内容: 我有两个对象:和。 输入的数据用于填充表单,是用户更改此表单中的数据并提交后的结果。 两个物体都很深,即。它们具有对象或对象数组等属性-它们的深度可以为n级,因此diff算法需要递归。 现在我需要不只是从弄清楚什么改变(如添加/更新/删除)来,却怎么也最能代表它。 到目前为止,我的想法只是建立一个将在表单上返回对象的方法,但随后我想到:之前一定有人需要此方法。 那么…是否有人知道可以做

  • 我目前正在创建一个设计不佳的战舰游戏,我已经达到了一个点,我不知道如何从另一个对象访问一些数据。 我有一个板类,它创建两个大小为100的数组。我有一个玩家类,它有属于他们的两块板的实例(他们的板和敌人的板(击中,错过,空)) 我所遇到的问题是,如何使两个玩家的棋盘同步,但在棋盘的功能内,在玩家的内部。。。 我的职能应该是脱离董事会,以便 但是,在player1.boards的功能中,如何访问pla

  • 问题内容: 是否有一个跟踪用户某些事件的表。 总是有一个动作,之后可能会有一个动作。 现在,我想查询这两个动作之间的时间差,以获取用户和之间的time_diff 。 现在,您可以假定没有多个条目(例如,至少一个,最大另一个)。 我想要这样的结果: 问题答案: 您可以使用以下查询: 该子句过滤掉仅包含一个动作的组,例如OP中的with记录。 演示在这里

  • 问题内容: 我想知道判断Shape对象是否与另一个形状相交的最佳方法。目前,我在游戏中已对碰撞检测进行了分类,只要它涉及与矩形相交的Shape,反之亦然。我遇到的问题是Shape类中的intersects()方法只能将Rectangle或Point作为参数,而不能将另一个Shape用作参数。有没有一种有效的方法来测试两个Shape对象是否以任何方式重叠?我尝试的一种方法是使用for循环生成一个点区

  • 问题内容: 我需要计算两个日期之间经过的时间。 这里要注意的是,我需要像YouTube一样用视频评论时间戳来显示它。也就是说,仅以最大的方式显示它。 例如, 如果时间是50秒前,应该说是50秒前。 如果时间超过一分钟,则应说一分钟前/十分钟前,等等。 如果时差是1小时30分钟,则应显示:一个小时前。 如果时间是一个半星期而不是一个星期前应该说的话。 如果时间超过一个月,则应说一个月前/两个月前,等