为啥这些日期时间对象时区不相等?
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是没有时区的日期?