出于某些原因,我的雇主不想使用pip安装第三方软件包,并且希望我使用仅托管在可信任的软件包上。因此,我现在无法在代码中使用pytz。如何检查时区中的某个日期是否在DST中?这是我使用pytz的原始代码。

    import pytz
    import datetime
    ...

    target_date = datetime.datetime.strptime(arg_date, "%Y-%m-%d")
    time_zone = pytz.timezone('US/Eastern')
    dst_date = time_zone.localize(target_date, is_dst=None)
    est_hour = 24
    if bool(dst_date.dst()) is True:
        est_hour -= 4
    else:
        est_hour -= 5

最佳答案

在一般情况下,这是一个复杂的问题,不适合手动解决。依靠由专门负责此任务的人员(例如pytz)审核和维护的外部模块是唯一明智的选择。

但是,鉴于您只对美国时区(特别是东部时区)感兴趣的限制,可以编写一个简单的函数。显然,这仅对当前(2016年)规则有好处,该规则可能随时更改。这些规则指出DST last changed in 2007

此代码基于starts on the second Sunday in March and ends on the first Sunday in November

def is_dst(dt):
    if dt.year < 2007:
        raise ValueError()
    dst_start = datetime.datetime(dt.year, 3, 8, 2, 0)
    dst_start += datetime.timedelta(6 - dst_start.weekday())
    dst_end = datetime.datetime(dt.year, 11, 1, 2, 0)
    dst_end += datetime.timedelta(6 - dst_end.weekday())
    return dst_start <= dt < dst_end

关于python - 检查日期是否在没有pytz的时区的夏时制中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38722792/

10-11 18:53