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

2024-04-25 19:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的日期格式如下:

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')

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


Tags: 模块datetimetime格式方式unix建议timestamp
1条回答
网友
1楼 · 发布于 2024-04-25 19:47:35

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

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,解析为naive datetime,本地化到适当的时区,然后获取时间戳:

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

相关问题 更多 >