回答

收藏

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

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

非常新的’Go’。问题可能是基本问题。1 R- d. d6 g4 M. `
我有两个 time.Time 对象,我想在小时/分钟/秒之间得到区别。让我们说:
1 v9 P0 ~& x. G& c5 n
    t1 = 2016-09-09:09:16 0530 ISTt2 = 2016-09-09:09:16 0530 IST* [! z: ?) g/ ]
在上述情况下,差异为 0。它应该给我 00:00:00。考虑另一种情况:6 q8 t8 e' G1 w: A# E% U* x1 f" ?( T
    t1 = 2016-09-14:12:48 ISTt2 = 2016-09-14 14:18:29  0530 IST" c4 y+ B1 M+ H! x. L; N
在这种情况下,差异将是 00:05:41。
) |: O* r( K8 {8 j! @                                                               
# m: y  K6 m( I    解决方案:                                                                , x- X! S. D7 S0 |$ ], K
                                                                您可以使用Time.Sub()获取 2 个time.Time结果是 值之间的差值time.Duration。
0 k: f: b1 I, t0 t打印时,atime.Duration会智能格式化自己:" h7 K% l# D5 e, Z$ I( ~& Y, B! v
    t1 := time.Now()t2 := t1.Add(time.Second * 341)fmt.Println(t1)fmt.Println(t2)diff := t2.Sub(t1)fmt.Println(diff)
    " i& B; N  Q/ ~$ ?0 a' P: t
输出:
' C, i9 E! F4 s
    2009-11-10 23:00UTC2009-11-10 23:05:41 UTC5m41s
    3 F! t5 Y! L# }  W* H4 D) e
假如你想要时间格式HH:mm:ss,你可以建造一个time.Time值并Time.Format()这样使用它的方法:$ H/ J' g" {+ h& C  Y( T% R0 _, K4 K
    out := time.Time{}.Add(diff)fmt.Println(out.Format("15:04:05"))8 q" K( w0 q7 R; N# R
输出:
9 A! O1 W& T8 L9 d8 o; I
    00:05:410 q$ V' |! K6 O1 V; t& s' e
试试Go Playground上的例子。
( ]; Z: w0 }8 C+ `9 }1 X当然,这只适用于时差小于一天的情况。如果差异可能更大,那就另当别论了。结果必须包括天、月、年。复杂性显著增加。
& `( n7 w; T# h: u) ]* Y那里提出的解决方案通过显示签名函数来解决:- `! M0 c" c5 Y7 m1 i# n3 ~  r
    func diff(a,b time.Time) (year,month,day,hour,min,sec int)4 f7 F, A/ H: R4 G' g& a6 g& ]  F' O
即使你的时间在24小时内(在这种情况下),你也可以使用它year,month和day会0)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则