回答

收藏

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

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

非常新的’Go’。问题可能是基本问题。
0 T- F! u3 U: b我有两个 time.Time 对象,我想在小时/分钟/秒之间得到区别。让我们说:
/ Y4 }) X' {' s( J8 N8 F  G2 _; \
    t1 = 2016-09-09:09:16 0530 ISTt2 = 2016-09-09:09:16 0530 IST4 t5 Q" k! v6 \: O$ r% _3 x
在上述情况下,差异为 0。它应该给我 00:00:00。考虑另一种情况:
* p/ |) _6 C/ {0 x3 ?: {5 x. p
    t1 = 2016-09-14:12:48 ISTt2 = 2016-09-14 14:18:29  0530 IST! a6 ]7 r! n) o' Y% h% s7 j& F
在这种情况下,差异将是 00:05:41。
/ n/ \+ L2 F6 U! b, ^                                                               
" I- f' C9 H! y$ \    解决方案:                                                               
+ ?& N  p# U/ o$ a" ]                                                                您可以使用Time.Sub()获取 2 个time.Time结果是 值之间的差值time.Duration。
2 i2 X7 m1 i& `, {2 J, S打印时,atime.Duration会智能格式化自己:
' z9 L2 U$ ~, G) h7 |- M
    t1 := time.Now()t2 := t1.Add(time.Second * 341)fmt.Println(t1)fmt.Println(t2)diff := t2.Sub(t1)fmt.Println(diff)2 Y8 \7 `: p/ h* S. e" @
输出:$ g. z3 K4 ]& v. n2 L& g7 E( C5 R
    2009-11-10 23:00UTC2009-11-10 23:05:41 UTC5m41s: w2 @! E( Z, _6 R; ~6 D9 J
假如你想要时间格式HH:mm:ss,你可以建造一个time.Time值并Time.Format()这样使用它的方法:
9 r) M* T/ v( h7 J' O
    out := time.Time{}.Add(diff)fmt.Println(out.Format("15:04:05"))  U% q7 ^" t, T. E) a% z
输出:
; D. b- _3 J$ l: ]# r5 b" P! q+ C
    00:05:418 Y- e! O" {" a5 R, [2 c9 L
试试Go Playground上的例子。( h! V0 x* S6 d/ T6 j8 u4 M! \
当然,这只适用于时差小于一天的情况。如果差异可能更大,那就另当别论了。结果必须包括天、月、年。复杂性显著增加。
4 N( q/ s3 {) p# I那里提出的解决方案通过显示签名函数来解决:6 h1 n0 e4 m. P8 @+ {
    func diff(a,b time.Time) (year,month,day,hour,min,sec int)
    : I$ O; G8 U3 R
即使你的时间在24小时内(在这种情况下),你也可以使用它year,month和day会0)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则