回答

收藏

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

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

非常新的’Go’。问题可能是基本问题。  T" \% T0 `* z  A) @
我有两个 time.Time 对象,我想在小时/分钟/秒之间得到区别。让我们说:
$ m$ s: d8 `" a5 z; p
    t1 = 2016-09-09:09:16 0530 ISTt2 = 2016-09-09:09:16 0530 IST3 q  X1 d' V+ B
在上述情况下,差异为 0。它应该给我 00:00:00。考虑另一种情况:- ~" j5 e3 \$ y9 x% }  D; V
    t1 = 2016-09-14:12:48 ISTt2 = 2016-09-14 14:18:29  0530 IST
    6 m0 i6 q8 `) g7 X2 a
在这种情况下,差异将是 00:05:41。
2 u( r  s2 h3 W* W' u  p                                                                ) F1 E! s* N& v1 c
    解决方案:                                                               
# B5 T  u3 ^- r% Q3 n# M) D                                                                您可以使用Time.Sub()获取 2 个time.Time结果是 值之间的差值time.Duration。
# e! O0 ]4 }5 W2 U9 s打印时,atime.Duration会智能格式化自己:
. Z7 }! e! ?: O! p* o( e
    t1 := time.Now()t2 := t1.Add(time.Second * 341)fmt.Println(t1)fmt.Println(t2)diff := t2.Sub(t1)fmt.Println(diff); r6 x" U1 d) B  ^- J* I
输出:
/ f9 N) p; B  T' Q
    2009-11-10 23:00UTC2009-11-10 23:05:41 UTC5m41s
      J$ f2 i3 w# w7 \& g/ v
假如你想要时间格式HH:mm:ss,你可以建造一个time.Time值并Time.Format()这样使用它的方法:% J6 `- U% p) v, }
    out := time.Time{}.Add(diff)fmt.Println(out.Format("15:04:05"))
    + D; h( F5 D# r& C3 u
输出:$ p8 {* L" a8 q6 y
    00:05:41
    7 z0 v0 k. W& i! E
试试Go Playground上的例子。
8 Z5 i# H, P& k& W当然,这只适用于时差小于一天的情况。如果差异可能更大,那就另当别论了。结果必须包括天、月、年。复杂性显著增加。7 Q- R. h3 X& W  ?; ]7 X
那里提出的解决方案通过显示签名函数来解决:
, ~9 {0 x+ e- e: b3 @8 N/ `
    func diff(a,b time.Time) (year,month,day,hour,min,sec int)
    # h% _7 a+ K  y+ E! }  i! Z6 H
即使你的时间在24小时内(在这种情况下),你也可以使用它year,month和day会0)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则