Python 如何知道两个日期时间是否正好涵盖一天(DST问题)
我有一段代码,它提供了两个时区感知PythonPython 如何知道两个日期时间是否正好涵盖一天(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
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