我目前正在使用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。如何修复我的代码来检测这个?谢谢!
答案 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。