如何在 Go 中将持续时间转换为天数

Jac*_*ack 1 duration go intervals

在 Go 中,如何将持续时间转换为天数?

例如 1W => 7days,1Y => 365days 等。

Fli*_*mzy 8

出于许多常见目的,简短的回答是将小时数除以 24,以获得通常有用的天数近似值。

d, _ := time.ParseDuration("48h")
days := d.Hours()/24 // 2 days
Run Code Online (Sandbox Code Playgroud)

但是,这并不总是“正确”的,这取决于您的情况。考虑:

从 2018 年 11 月 1 日午夜到 2018 年 11 月 8 日午夜之间有多少天?答案实际上至少取决于两件事:您对一天的定义以及您所在的位置。如果您计算两个日期之间的持续时间,并按上述方法进行除法,如果您位于美国,由于夏令时的变化,您的答案将是 7.04167 天。

如果您的时间段发生在春季的正确时间,则您的答案可能是 6.95833 天,这是由于 DST 向另一个方向变化。

如果您考虑到多个时区、闰秒或其他“正常”偏差,您最终可能会得到更加混乱的结果。

出于某些目的,7.04167 天将是正确的答案。对于其他目的,7 将是正确答案。

因此,在尝试计算“天”时,首要任务始终是确定对您而言重要的定义。其次,弄清楚如何计算满足需求的有意义的数字。