Django时区:如何比较跨夏令时的两天之间的天数差异
我现在正在用Django做一个日历项目,里面涉及到一些时间计算。在计算两个日期时间对象之间的时间差时,我遇到了一个问题。当我创建时间的时候,我是这样做的:
tz = timezone.get_default_timezone()
curr_day = timezone.make_aware(datetime.datetime(curr_day.year,
curr_day.month,
curr_day.day,
0, 0, 0), tz)
在创建的时候,日期是最重要的,但因为这个对象要用日期时间(datetime),所以我加了三个0,分别代表小时、分钟和秒。
我的程序试图比较两个日期时间之间的天数差异是否为1,所以我这样做:
if (event1 - event2).days == 1:
# do something
问题出现在我尝试比较2017年3月12日和2017年3月13日的时候(2017年3月12日是夏令时的开始)。
event1
datetime.datetime(2017, 3, 13, 4, 0, tzinfo=<UTC>)
event2
datetime.datetime(2017, 3, 12, 5, 0, tzinfo=<UTC>)
(event1-event2).days
0
我知道这是因为夏令时的原因,让它们之间的差异小于一天,但我不知道该怎么解决这个问题,因为理论上结果应该是1。我该如何修改我的代码来检测这个呢?谢谢!
1 个回答
4
你可以在计算时间差之前,把小时、分钟和天数都设为0:
In [79]: import datetime as DT
In [80]: (DT.datetime.combine(event1, DT.time(0)) - DT.datetime.combine(event2, DT.time(0))).days
Out[80]: 1
需要注意的是,根据这个“天”的定义,两个考虑时区的时间可能在一个时区下相差1天,而在另一个时区下却相差0天。