You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:25:12