python - 在使用利用夏令时的 Python 时区时,应该传递什么 tzinfo?
问题描述
我正在尝试将日期字符串转换为日期时间,但找不到任何可靠的文档,涉及哪些时区代码映射到哪些时区,特别是我正在处理利用夏令时的时区。
我有 4 个潜在的时区代码,我正在尝试确定要传递给 tz.gettz 的夏令时代码。
import dateutil.parser as p
import dateutil.tz as tz
tzinfos = {"CST": tz.gettz("America/Chicago"),
"CDT": tz.gettz("?"), # HERE
"EST": tz.gettz("America/Eastern"),
"EDT": tz.gettz("?") # HERE
}
date_strings = ["Wed Mar 03 09:44:59 CST 2021",
"Wed Mar 03 09:44:59 CDT 2021",
"Wed Mar 03 09:44:59 EST 2021",
"Wed Mar 03 09:44:59 EDT 2021"]
for s in date_strings:
print(p.parse(s, tzinfos=tzinfos))
日期字符串是通过我的州交通部提供的 API 输入的,该 API 从州高速公路内置的传感器获取数据,最终目标是将它们全部转换为 UTC 时间,但我无法知道它们是什么UTC 时间应该是,所以我不能只是猜测时区然后验证它们。
我一直在浏览这个 wikipedia page of timezones
,例如,它看起来就像CDT
, 一样CST
,tz.gettz("America/Chicago")
但是我正在处理的应用程序将用于调度交通事故的第一响应者,所以时间至关重要转换被正确处理。我希望找到有关应该传递给tz.gettz()
函数的文档?
解决方案
看看文档dateutil.tz
:
help(dateutil.tz)
... | 以美国东部时区为例,我们可以看到一个 ``tzfile`` | 提供标准夏令时偏移的时区信息: | | .. testsetup:: tzfile | | 从 dateutil.tz 导入 gettz | 从日期时间导入日期时间 | | .. doctest:: tzfile | | >>> NYC = gettz('America/New_York') | >>> 纽约 | tzfile('/usr/share/zoneinfo/America/New_York') | | >>> print(datetime(2016, 1, 3, tzinfo=NYC)) # EST | 2016-01-03 00:00:00-05:00 | | >>> print(datetime(2016, 7, 7, tzinfo=NYC)) # EDT | 2016-07-07 00:00:00-04:00 ...
时区会根据日期自动计算夏令时偏移。所以你tzinfos
应该是:
tzinfos = {"CST": tz.gettz("America/Chicago"),
"CDT": tz.gettz("America/Chicago"),
"EST": tz.gettz("America/Eastern"),
"EDT": tz.gettz("America/Eastern")
}
真的花时间阅读整个文档,它非常整洁。“America/New_York”时区甚至可以解释二战期间的全年夏令时。
推荐阅读
- apache-spark - 在pyspark中合并多个数据框
- java - LDAP DirContext 搜索 - Perl 到 Java,返回不同的对象模型
- hibernate - JPA hibernate 上的 ConcurrentModificationException 保存 spring/JPA/Java
- algorithm - 确定是否可以将给定集合划分为两个子集,使得两个子集中的元素之和相同
- tfs - 修改 TFS 工作项工作流以防止状态更改
- excel - 运行时错误“1004”:应用程序定义或对象定义的错误 .Cells
- c# - 在mysql数据库中插入一行时收到通知
- c# - SetWindowsHookEx WH_KEYBOARD_LL 问题锁屏
- mysql - mysql innodb 记录锁和插入意向锁如何协同工作?
- javascript - 如何在 fastify 中分配基本路由中的路由