Python strptime解析PST/PDT时区字符串报错,求epoch转换方法
解决PDT/PST时区字符串转Epoch时间的问题
问题根源在于Python标准库datetime.strptime的%Z格式符对时区缩写的支持有限:IST这类固定时区的缩写能被系统识别,但PDT、PST这类夏令时/标准时的缩写,不同平台的支持情况不一致,直接解析会失败。
下面提供两种可行的解决方案:
方案一:使用python-dateutil自动解析时区
python-dateutil的parser模块能自动识别绝大多数时区缩写,是最省心的处理方式。
代码示例
#!/usr/bin/python3 from dateutil import parser import pytz def convertTime(dateStr): # 自动解析带时区的字符串 parsed_dt = parser.parse(dateStr) # 转换为目标时区(可选,parser已识别时区,此步用于统一时区) localized_dt = parsed_dt.astimezone(pytz.timezone("America/Los_Angeles")) epochTime = int(localized_dt.timestamp()) print(epochTime) convertTime("01-06-2024 21:30 PDT")
注意事项
- 需要先安装依赖:
pip install python-dateutil
方案二:手动处理时区缩写
如果不想引入第三方库,可以手动拆分时区缩写,结合pytz本地化时指定夏令时状态。
代码示例
#!/usr/bin/python3 from datetime import datetime import pytz def convertTime(dateStr): # 拆分日期时间和时区缩写 dt_part, tz_abbr = dateStr.rsplit(' ', 1) # 解析不带时区的日期时间部分 naive_dt = datetime.strptime(dt_part, "%d-%m-%Y %H:%M") # 映射时区缩写到对应的pytz时区对象 tz_map = { 'PDT': pytz.timezone("America/Los_Angeles"), 'PST': pytz.timezone("America/Los_Angeles") } tz = tz_map.get(tz_abbr) if not tz: raise ValueError(f"不支持的时区缩写: {tz_abbr}") # 本地化时指定是否为夏令时(PDT是夏令时,PST是标准时) localized_dt = tz.localize(naive_dt, is_dst=(tz_abbr == 'PDT')) epochTime = int(localized_dt.timestamp()) print(epochTime) convertTime("01-06-2024 21:30 PDT")
说明
is_dst参数用于消除夏令时切换时的时间歧义,确保本地化结果准确。
内容的提问来源于stack exchange,提问作者Vijesh
相关产品推荐
相关产品推荐

