Python:如何在处理模棱两可的日子(23和25小时)的同时,将天数添加到本地化数据时



我的问题与此问题相似,但是在我的UTC数据datemes上进行the the the the the the the the the the the toce n toctimes不是我的选择。

我的功能可以评估每个"人类日"的时期,因此午夜到午夜。这意味着在英国,分别有两天的时间为23和25小时。它的工作原理:

import datetime
import pytz
start_dt = datetime.datetime(2016, 3, 27, 0, 0, 0, 0)
localtz = pytz.timezone('Europe/London')
start_dt = localtz.localize(start_dt)
print start_dt
end_dt = start_dt + datetime.timedelta(days=1)
print end_dt
print (end_dt - start_dt).total_seconds()

在上面的摘要中 end_dt 评估2016-03-28 00:00:00:00 00:00,TimeDelta是86400。不是2016-03-28 003-28 00:00:00 01:00和82800?

我已经看过帖子说要使用pytz函数归一化()来'norking'end_dt,但它只是导致2016-03-28 01:00:00:00 01:00

添加25小时,然后重置时间。如果时间总是午夜到午夜,这可以有效,但可能会在一天中的其他时间失败。

end_dt = start_dt + datetime.timedelta(hours=25)
end_dt = end_dt.replace(hour=0, minute=0, second=0)

更健壮的解决方案使用中午计算,然后替换时间。这应该在一天中的任何时间和任何时区规则中起作用,并允许任何任意数天(甚至是负数)。

def add_days(start_dt, days):
    end_dt = start_dt.replace(hour=12, minute=0) + datetime.timedelta(days=days)
    return end_dt.replace(hour=start_dt.hour, minute=start_dt.minute)

最新更新