【问题标题】:Why do a timezone-unaware and a timezone-aware datetime object with a different timezone yield the same unix-timestamp?为什么时区不感知和具有不同时区的时区感知日期时间对象会产生相同的 unix 时间戳?
【发布时间】:2020-07-19 09:33:58
【问题描述】:

因此,据我了解,如果您在没有时区的情况下从或转换为 unix 时间戳,您将始终得到 GMT/UTC,如下所示:

import datetime
import pytz
datetime.datetime(2020,4,1,0,0,0).timestamp()

生成的时间戳为1585692000

现在如果我这样做:

(pytz.timezone("Europe/Berlin").localize(datetime.datetime(2020,4,1,0,0,0))).timestamp()

它产生相同的 unix 时间戳。

如果我输入一个日期时间并告诉程序这个日期时间的时区为 GMT+1,那么它的 UTC 值应该偏移 1 小时,并且由于 unix-timestamp 始终是 UTC,它也应该是不同的,但它是一样的。

为什么?我的哪个假设是错误的?

【问题讨论】:

    标签: python datetime timezone unix-timestamp utc


    【解决方案1】:

    UNIX 时间戳没有时区,它们始终表示自 1970 年 1 月 1 日 00:00 UTC 以来经过的秒数。该数字在全球范围内都是相同的,不会随着您的时区而改变。

    假设朴素的datetime 实例表示本地时间,并且[timestamp] 依赖于平台C 的mktime() 函数来执行转换。

    https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp

    因此,如果您在欧洲/柏林,那么在转换为时间戳时,本地化为欧洲/柏林的天真 datetimedatetime 的解释方式相同。尝试本地化到其他时区,这意味着2020, 4, 1, 0, 0, 0实际上指的是不同的时间,您也会看到不同的时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2022-01-26
      • 2020-10-15
      • 2020-11-20
      • 2019-01-02
      相关资源
      最近更新 更多