在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳

Posted

技术标签:

【中文标题】在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳【英文标题】:Convert EST, CST and DST timezones to unix timestamp in Pytz Module in Python 3 【发布时间】:2021-03-23 14:09:03 【问题描述】:

我的日期格式如下:

2019-12-13 20:18 EST2019-12-13 20:18 DST2019-12-13 20:18 CST

我想将它们转换为unix timestamp

我正在使用Pytz 模块。

到目前为止,我已经尝试通过以下方式使用datetime 模块:

time_est = '2019-12-13 20:18 EST'

datetime.datetime.strptime(time_est, '%Y-%m-%d %H:%M %z')

这似乎也不起作用。任何建议或提示将不胜感激。

【问题讨论】:

旁注:%z 用于解析 UTC 偏移量,例如'+00:00' 将被解析为 UTC。还有%Z 将解析非常具体的缩写,请参阅the docs。但是,这 a) 取决于平台,并且 b) 它实际上不会设置生成的 datetime 对象的 tzinfo 属性。 【参考方案1】:

时区名称缩写在许多情况下是不明确的(不同时区的缩写,see e.g. here),因此最好明确定义缩写的含义。您可以通过向 dateutil 的解析器提供映射字典来实现。

import dateutil

tzmapping = 'EST': dateutil.tz.gettz('America/New_York'),
             'EDT': dateutil.tz.gettz('America/New_York'),
             'CST': dateutil.tz.gettz('America/Chicago'),
             'CDT': dateutil.tz.gettz('America/Chicago')
             # add more if needed...

time_eastern = '2019-12-13 20:18 EST'

dtobj = dateutil.parser.parse(time_eastern, tzinfos=tzmapping)
# datetime.datetime(2019, 12, 13, 20, 18, tzinfo=tzfile('US/Eastern'))

time_unix = dtobj.timestamp()
# 1576286280.0

如果您必须使用 pytz,则必须忽略字符串中的 EST,解析为原始日期时间,本地化到适当的时区,然后获取时间戳

import datetime
import pytz

eastern = pytz.timezone('America/New_York')
dtobj = eastern.localize(datetime.datetime.strptime(time_eastern, '%Y-%m-%d %H:%M EST'))
time_unix = dtobj.timestamp()
# 1576286280.0

【讨论】:

以上是关于在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

关于 Python 中的 pytz 模块和 time 模块

python 通过pytz模块进行时区的转换,获取指定时区的时间

python模块-pytz时区转换

带有 Twilio 的 Google App Engine:ImportError:没有名为 pytz 的模块 [重复]

如何在 Python 中将美国/东部时区转换为美国/中部

python 在Python 3中将StringIO与csv模块一起使用的示例。