Dea*_*ake 6 python datetime python-3.x
由于某些原因,我的雇主不想使用 pip 安装第三方软件包,并希望我使用仅托管在 trusty 上的软件包。因此,我现在无法在代码中使用 pytz。我将如何检查时区中的某个日期是否采用夏令时?这是我使用 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
Run Code Online (Sandbox Code Playgroud)
在一般情况下,这是一个复杂的问题,不适合手工解决。依赖由专门负责该任务的人员审查和维护的外部模块(例如 )pytz是唯一明智的选择。
然而,考虑到您只对美国时区(特别是东部时区)感兴趣,因此可以编写一个简单的函数。显然,这仅对当前(2016 年)规则有利,该规则上次更改是在 2007 年,并且随时可能再次更改。这些规则规定 DST从 3 月的第二个星期日开始,到 11 月的第一个星期日结束。
该代码基于我的算法,用于查找一个月中的特定日期。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6764 次 |
| 最近记录: |