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

时间:2012-12-04 16:13:48

标签: 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

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

2 个答案:

答案 0 :(得分:3)

当您想要消除时区差异时,

http://pytz.sourceforge.net/是您想看的地方:)

编辑:刚刚找到this post on SO,可能会为您提供更多有关您问题的信息

答案 1 :(得分:1)

由于错误提示您“无法比较原始偏移时间和可感知偏移的日期时间”。这意味着您应该比较两个都知道时区的日期时间或两个都没有时区的日期时间(不知道时区)。在您的代码中,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

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