我想计算一个日期间隔中有多少小时:例如“2014.03.29-30”应该是47,因为夏令时。在
我的方法是生成两个datetime对象,在下面的示例中:
datetime.datetime(2014, 3, 29, 0, 0, tzinfo=<DstTzInfo 'Europe/Budapest' LMT+1:16:00 STD>)
datetime.datetime(2014, 3, 30, 23, 59, tzinfo=<DstTzInfo 'Europe/Budapest' LMT+1:16:00 STD>)
return (date2-date1) + timedelta(minutes=1)
但是,它给出了“2天,0:00:00”,这是不正确的。如何制作一个考虑时区和dst的timedelta对象?另外,如果有更简单的方法来解决整个问题,我愿意接受。在
谢谢你!在
在1901-12-13 20:45:52 UTC之前,
'Europe/Budapest'
时区是LMT+1:16:00 STD。 目前,截至2016-05-05,'Europe/Budapest'
时区为CET+2:00:00DST。在如果使用pytz的^{} method ,那么pytz将为
'Europe/Budapest'
选择适合给定原始日期时间的时区(utcoffset和dstoffset):相反,如果您将
^{2}$tzinfo=tzone
直接提供给datetime.datetime
,如:然后
datetime.datetime
错误地选择了与'Europe/Budapest'
相关联的第一个时区,而不管这是否是2014年3月29日生效的时区。在因此,在使用pytz时,请始终使用
tzone.localize
使naivedatetimes时区感知:Do not use ^{} 除非
tzone
是pytz.utc
(或者在其历史上一直是相同的时区)日期是从哪里来的?
您可以使用pytz时区的
tzone._utc_transition_times
和tzone._transition_info
私有属性来查看pytz时区的utc转换时间(以及相关的转换信息):这表明从
1-1-1 UTC
到1901-12-13 20:45:52 UTC
,时区缩写是LMT
,utcoffset是4560秒,等于1小时16分钟:因此,与
'Europe/Budapest'
相关联的第一个时区是LMT+1:16:00 STD
。在相关问题 更多 >
编程相关推荐