django timezone:如何比较夏令时间2天之间的时差

时间:2014-08-25 14:00:30

标签: python django timezone

我目前正在使用django进行日历项目,涉及一些时间计算,当我尝试计算2个日期时间对象之间的时差时遇到了问题。当我创造时间时,我会这样做:

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,分为小时,分钟,秒。

我的程序试图比较2个日期时间是否有1天的差异,所以我做

if (event1 - event2).days == 1:
    # do something

当我尝试比较03/12/2017和2017年3月13日(2017年12月3日是DST)时出现问题。

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 个答案:

答案 0 :(得分:3)

您可以在获得差异之前将小时,分钟,天数设置为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。