使用夏令时的 Python 时区时,应该传递什么 tzinfo?
When working with Python time-zones that utilize daylight-savings time, what tzinfo should be passed?
我正在尝试将日期字符串转换为日期时间,但找不到任何涉及哪些时区代码映射到哪些时区的可靠文档,特别是我正在处理利用夏令时的时区。
我有 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 输入,该部门从州际公路内置的传感器获取数据,最终目标是将它们全部转换为 UTC 时间,但我无法知道他们的 UTC 时间 应该 是多少,所以我不能只猜测时区然后验证它们。
我一直在经历 this wikipedia page of timezones
例如,看起来 CDT
与 CST
相同,是 tz.gettz("America/Chicago")
,但我正在处理的应用程序将用于派遣急救人员处理交通事故,所以它是正确处理时间转换至关重要。我希望找到有关应该传递给 tz.gettz()
函数的内容的文档?
看看dateutil.tz
的文档:
help(dateutil.tz)
...
| Using the US Eastern time zone as an example, we can see that a ``tzfile``
| provides time zone information for the standard Daylight Saving offsets:
|
| .. testsetup:: tzfile
|
| from dateutil.tz import gettz
| from datetime import datetime
|
| .. doctest:: tzfile
|
| >>> NYC = gettz('America/New_York')
| >>> NYC
| 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”时区在二战时期甚至占到了全年夏令时。
我正在尝试将日期字符串转换为日期时间,但找不到任何涉及哪些时区代码映射到哪些时区的可靠文档,特别是我正在处理利用夏令时的时区。
我有 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 输入,该部门从州际公路内置的传感器获取数据,最终目标是将它们全部转换为 UTC 时间,但我无法知道他们的 UTC 时间 应该 是多少,所以我不能只猜测时区然后验证它们。
我一直在经历 this wikipedia page of timezones
例如,看起来 CDT
与 CST
相同,是 tz.gettz("America/Chicago")
,但我正在处理的应用程序将用于派遣急救人员处理交通事故,所以它是正确处理时间转换至关重要。我希望找到有关应该传递给 tz.gettz()
函数的内容的文档?
看看dateutil.tz
的文档:
help(dateutil.tz)
... | Using the US Eastern time zone as an example, we can see that a ``tzfile`` | provides time zone information for the standard Daylight Saving offsets: | | .. testsetup:: tzfile | | from dateutil.tz import gettz | from datetime import datetime | | .. doctest:: tzfile | | >>> NYC = gettz('America/New_York') | >>> NYC | 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”时区在二战时期甚至占到了全年夏令时。