python - datetime.combine() 和 pytz.localize() 之间的区别

标签 python datetime timezone

我对下面的行为有点疑惑。假设我使用 datetime.combine()构建时区感知对象:

>>> date
datetime.date(2018, 10, 17)
>>> time
datetime.time(6, 0)
>>> tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
>>> datetime.combine(date, time, tzinfo=tz)
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>)

或者我使用 pytz.localize()做同样的事情:

>>> tz.localize(datetime.combine(date, time))
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)

请注意 tzinfo的时区名称和偏移量已更改。我无法找到该行为的适当文档。 pytz 文档说

Unfortunately using the tzinfo argument of the standard datetime constructors “does not work” with pytz for many timezones.

那么这里到底发生了什么? (有些相关的问题是 herehere。)

最佳答案

您刚刚(再次)发现在创建时区感知日期时间时永远不应该直接添加时区信息。始终使用 tz.localize()

您看到的问题是因为 datetime.combine 没有将 tzinfo 对象调整为实际的日期时间。它仍然采用该时区中第一个有效日期的时区信息,该日期是在 1800 年代后期,恰好与 UTC 相差 0:53:00

关于python - datetime.combine() 和 pytz.localize() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733868/

相关文章:

php - 如何使用 PHP 5.2 从 DateTime 对象获取 unix 时间戳?

database - RDBMS 时间戳与 Hive 时间戳时区不匹配

python - 将每一行替换为一列

python - Pandas 不一致的日期时间格式

python - 如何将两个日期时间列合并为一? Pandas python

mysql - 在mysql数据库中存储时区信息

MySQL NOW() 似乎可以正确地与我的机器上的本地日期时间进行比较,但在部署时却不能

python脚本获取60天未登录的IAM用户列表

python - 获取图像的 RGB channel

python - Scipy.optimize.minimize 使用仅包含整数的设计向量 x