【问题标题】:Python datetime conversion to timestampsPython 日期时间转换为时间戳
【发布时间】:2020-06-15 23:32:50
【问题描述】:

我很难理解为什么下面的代码行

from datetime import datetime 

t1 = datetime(2019, 3, 31, 0, 0, 0).timestamp()
t2 = datetime(2019, 4, 1, 0, 0, 0).timestamp()
dt = t2-t1
print(f"dt = {dt} seconds.")

输出

dt = 82800.0 seconds.

而不是

dt = 86400.0 seconds.

t2 和 t1 之间的时间差显然是 1 天 = 24 小时 = 1440 分钟 = 86400 秒。为什么会这样?

【问题讨论】:

  • 您是否处于 DST 更改恰好发生在 3 月 31 日的时区...?
  • 正好是一小时。可能是时间变化引起的:夏/冬时间?

标签: python datetime time timestamp


【解决方案1】:

打电话,例如datetime(2019, 3, 31, 0, 0, 0).timestamp() 将为您提供一个本地化到您机器时区的时间戳,因为 datetime 对象不知道任何时区(“天真”;参见 the docs)。显然,您所在的时区在该日期更改了 DST。

例如,如果您将时区设置为 UTC(无 DST),您将获得预期的结果:

from datetime import datetime, timezone
t1 = datetime(2019, 3, 31, 0, 0, 0, tzinfo=timezone.utc).timestamp()
t2 = datetime(2019, 4, 1, 0, 0, 0, tzinfo=timezone.utc).timestamp()
dt = t2-t1

print(f"dt = {dt} seconds.")
# dt = 86400.0 seconds.

【讨论】:

  • @RiccardoAngeloGiro,很高兴我能帮上忙。最好尽早发现此类 DST 问题,而不是稍后修复它……我建议尽可能使用 UTC。
【解决方案2】:

在您所在时区的那一天,时钟提前一小时改变,因为 82,000 是 23 x 60 x 60

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多