Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于不带pytz的时区,检查日期是否为夏令时_Python_Python 3.x_Datetime - Fatal编程技术网

Python 对于不带pytz的时区,检查日期是否为夏令时

Python 对于不带pytz的时区,检查日期是否为夏令时,python,python-3.x,datetime,Python,Python 3.x,Datetime,出于某些原因,我的雇主不想使用pip安装第三方软件包,而是希望我只使用托管在trusty上的软件包。因此,我现在无法在代码中使用pytz。我如何检查时区中的某个日期是否在DST中?这是我使用pytz的原始代码 import pytz import datetime ... target_date = datetime.datetime.strptime(arg_date, "%Y-%m-%d") time_zone = pytz.timezone('US

出于某些原因,我的雇主不想使用pip安装第三方软件包,而是希望我只使用托管在trusty上的软件包。因此,我现在无法在代码中使用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
不使用pip安装

DST是任意的,由不同地区的立法机构选择,你无法真正计算它——看,它实际上是一个硬编码日期列表,当DST在未来二十年发生变化时

您可以自己做,从pytz所做的相同源(/[或此链接]())中提取数据。或者从您的操作系统实现的tz,如果它有一个


但是(除非是许可原因)让你的雇主查看pytz来源,确认其无害,并批准其使用。

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

然而,考虑到您只对美国时区感兴趣的限制,特别是东部时区,可以编写一个简单的函数。显然,这只适用于现行(2016年)规则,该规则随时可能发生变化。这些规则规定DST

此代码基于

def为dst(dt):
如果dt.year<2007年:
提升值错误()
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())

返回dst_开始感谢您的建议。他们一般不想使用pip或任何包管理器的原因是,根据他们的说法,TechOps团队太小,无法管理每种语言的包管理器,并且由于每种语言的安全更新,不得不处理更新包的问题“对他们来说是一件痛苦的事”。我怀疑他们会同意在没有pip的情况下安装pytz。希望他们是合理的,并批准使用。你只担心美国时区,还是需要在全球范围内运营?我唯一关心的时区是美国东部。我想这是我能做到的最接近不使用pytz的地方了。谢谢你的帮助。
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