Python 如何知道两个日期时间是否正好涵盖一天(DST问题)

Python 如何知道两个日期时间是否正好涵盖一天(DST问题),python,datetime,dst,days,Python,Datetime,Dst,Days,我有一段代码,它提供了两个时区感知Pythondatetime(s),试图找出它们是否正好在同一天的开始和结束 在大多数情况下,检查两个日期之间的差异(时间差timedelta)是否为23小时59分59秒和999999微秒,可以正常工作: from datetime import datetime, time, timedelta, date import pytz ny = pytz.timezone('America/New_York') day=date(2019, 3, 11) st

我有一段代码,它提供了两个时区感知Python
datetime
(s),试图找出它们是否正好在同一天的开始和结束

在大多数情况下,检查两个日期之间的差异(时间差
timedelta
)是否为
23小时59分59秒和999999微秒
,可以正常工作:

from datetime import datetime, time, timedelta, date
import pytz
ny = pytz.timezone('America/New_York')

day=date(2019, 3, 11)

start_naive=datetime.combine(day, time.min)
start=ny.localize(start_naive)

end_naive=datetime.combine(day, time.max)
end=ny.localize(end_naive)

same_day_check = timedelta(hours=time.max.hour, 
                           minutes=time.max.minute, 
                           seconds=time.max.second, 
                           microseconds=time.max.microsecond)

print(f"Same day?")
(end - start) == same_day_check # This outputs True
⚠️ 但是…

在夏令时日期,一天不会持续23小时59分59秒。和999999微秒,但+1小时或-1小时(在这些日期中,“一天”可以持续22小时59分钟或24小时59分钟):


还有比这更可靠的方法吗?使用上面描述的
timedelta
显然不是一个可靠的解决方案。

要知道两个日期时间是否在同一天,我只需比较它们与日期的转换。为了知道它是否是一天的开始,我将控制小时、分钟、秒和微秒都为空,并且一天结束时的逻辑相同。我执行了你的示例,我得到了第二部分的
True
23:59:59.999999
。这可能与Python版本有关-在3.6中添加了属性。@SergeBallesta,这是一个好主意,我最终做了什么。如果你回答这个问题,我会把它标记为选中:)@Tupteq,谢谢你提到
fold
。我不知道它的存在!。幸运的是(至少现在)这些时间不会重复/切换(到目前为止!!),但我会记住这一点@谢谢,但是我现在太累了,写不出答案。。。你可以自己写,这样你就可以接受了。
# ...

day=date(2019, 3, 10)  # DST start in NY timezone

# ...

same_day_check = timedelta(hours=time.max.hour, 
                           minutes=time.max.minute, 
                           seconds=time.max.second, 
                           microseconds=time.max.microsecond)

print(f"Same day?")
(end - start) == same_day_check # Now this is `False`
print(end-start) # This outputs 22:59:59.999999