为啥这些日期时间对象时区不相等?

Posted

技术标签:

【中文标题】为啥这些日期时间对象时区不相等?【英文标题】:Why are these datetime objects timezones not equal?为什么这些日期时间对象时区不相等? 【发布时间】:2020-12-27 06:06:21 【问题描述】:

datetime 对象有问题。这是我的代码:

import datetime
import pytz

userInfo = 'Europe/Istanbul'

# Current date, 2020-9-8 15:00
cd = datetime.datetime.now(pytz.timezone(userInfo))

# Example date, 2020-9-8 15:00
ed = datetime.datetime(2020, 9, 8, 15, 0, pytz.timezone(userInfo))

# Print both dates
print('Example', ed, '\n', 'Current', cd, '\n')

if ed == cd:
    print('Equal')
else:
    print('Not worked')

如您所见,这些日期是相等的,但是当我尝试打印它们时,它给了我这个结果:

Example 2020-9-8 15:00:00.000000+01:56
Current 2020-9-8 15:00:00.000000+03:00
Not worked

时区不同,为什么?我对两个对象使用相同的时区。如何将两个对象的时区设置为+03:00(这是伊斯坦布尔的时区)?谢谢。

【问题讨论】:

datetime.datetime 缺少参数。在时区信息所在的地方应该是微秒,然后是时区信息。 请参阅this resource 以找出原因......只需使用dateutil 来避免这种奇怪的行为。或者 zoneinfo 一旦 Python 3.9 发布。 【参考方案1】:

您的代码无法运行,因为您需要使用 tzinfo=... :

ed = datetime.datetime(2020, 9, 8, 15, 0, tzinfo=pytz.timezone(userInfo))

但它给出了错误的结果。我不知道为什么,但要得到你想要的,请使用这种形式:

ed = pytz.timezone(userInfo).localize(datetime.datetime(2020, 9, 8, 15, 0))

欲了解更多信息,请查看此帖子:pytz - Converting UTC and timezone to local time

【讨论】:

以上是关于为啥这些日期时间对象时区不相等?的主要内容,如果未能解决你的问题,请参考以下文章

如果查询中的日期时间有时区,MariaDB MySQL 查询要长得多,但如果没有添加时区,则非常快 - 为啥?

为什么org.joda.time.LocalDate是没有时区的日期?

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

转换为没有时区的日期和时间? [复制]

使用 pytz 将日期时间从一个时区转换为另一个时区

在具有正确日期的python中转换和计算日期时间对象的时区