回答

收藏

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

技术问答 技术问答 252 人阅读 | 0 人回复 | 2023-09-12

非常新的’Go’。问题可能是基本问题。- @) D3 I2 K9 ?2 N$ ?) Y
我有两个 time.Time 对象,我想在小时/分钟/秒之间得到区别。让我们说:; m  M0 _, \. n/ o3 F# V3 i
    t1 = 2016-09-09:09:16 0530 ISTt2 = 2016-09-09:09:16 0530 IST
    * D  |4 r- V: D% [
在上述情况下,差异为 0。它应该给我 00:00:00。考虑另一种情况:* B# Q4 F4 B* z, J- R) Z
    t1 = 2016-09-14:12:48 ISTt2 = 2016-09-14 14:18:29  0530 IST+ E& H  l+ y  d! C1 ]; E
在这种情况下,差异将是 00:05:41。* }+ c4 k# Z  ]4 q+ m: P
                                                                & w( R% |. G7 q) b/ M7 W2 |" r
    解决方案:                                                               
4 M6 K- a$ [, a9 @0 w                                                                您可以使用Time.Sub()获取 2 个time.Time结果是 值之间的差值time.Duration。
* q! j$ p. z; ?" l4 Y, e. g% A打印时,atime.Duration会智能格式化自己:
% C- t' d0 X. d$ K4 g
    t1 := time.Now()t2 := t1.Add(time.Second * 341)fmt.Println(t1)fmt.Println(t2)diff := t2.Sub(t1)fmt.Println(diff)
    $ w! ~' x0 N# S3 i' h
输出:
- [/ P9 _  K& h/ c
    2009-11-10 23:00UTC2009-11-10 23:05:41 UTC5m41s$ J2 |( M% u+ V
假如你想要时间格式HH:mm:ss,你可以建造一个time.Time值并Time.Format()这样使用它的方法:
' l3 F& N' Z3 O, _
    out := time.Time{}.Add(diff)fmt.Println(out.Format("15:04:05"))# W, F/ V1 Y# V, N9 V
输出:; e% I1 y* }; d: a! u7 l" Q3 y, h
    00:05:41
    - ^9 X" ]# @8 p, b
试试Go Playground上的例子。$ m) n* ~& t7 v& X7 T
当然,这只适用于时差小于一天的情况。如果差异可能更大,那就另当别论了。结果必须包括天、月、年。复杂性显著增加。
$ f0 n3 f" `: v  |6 n那里提出的解决方案通过显示签名函数来解决:5 T+ Y# x: F- D) |
    func diff(a,b time.Time) (year,month,day,hour,min,sec int)8 {! f5 P1 G' R: U# e
即使你的时间在24小时内(在这种情况下),你也可以使用它year,month和day会0)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则