python比较不同时区的日期时间

Fea*_*nor 8 python python-2.7 python-datetime

我正在实现预定发布对象的功能.用户选择发布时间,我创建了一个每分钟运行的cron任务,并检查是否是发布的时间.

用户来自不同的时区.

所以我需要比较两个日期时间:

>>user_chosen_time
datetime.datetime(2012, 12, 4, 14, 0, tzinfo=tzinfo(120))
>>curdate=datetime.datetime.now()
datetime.datetime(2012, 12, 4, 18, 4, 20, 17340)
>>user_chosen_time==curdate
*** TypeError: can't compare offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)

抱歉相当愚蠢的问题,但我需要讨论这个问题.谢谢

Lou*_*uis 7

由于错误表明您“无法比较偏移天真和偏移感知日期时间”。这意味着您应该比较两个时区感知或时区幼稚(不感知时区)的两个日期时间。在您的代码中,curdate 没有时区信息,因此无法与时区感知的 user_chosen_time 进行比较。

首先,您应该为每个日期时间分配正确的时区。然后你可以直接比较两个不同时区的日期时间。

示例(使用 pytz):

import pytz
import datetime as dt

# create timezone
nytz=pytz.timezone('America/New_York')
jptz=pytz.timezone('Asia/Tokyo')

# randomly initiate two timestamps
a=dt.datetime(2018,12,13,11,2)
b=dt.datetime(2018,12,13,22,45)

# assign timezone to timestamps
a=nytz.localize(a)
b=jptz.localize(b)

# a = datetime.datetime(2018, 12, 13, 11, 2, tzinfo=<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)
# b = datetime.datetime(2018, 12, 13, 22, 45, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

a>b # True
b>a # False
Run Code Online (Sandbox Code Playgroud)

对于其他方法,您可以参考Convert a python UTC datetime to a local datetime using only python standard library? .


Sam*_*zzo 5

http://pytz.sourceforge.net/是您想要消除时区差异时想要查看的地方:)

编辑:刚刚在 SO 上找到了这篇文章,它可能会给你更多关于你的问题的信息