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

求助:将特定字符串日期转换为UTC格式的Python技术问题

解决Python日期格式转换的ValueError问题

问题原因分析

你遇到的ValueError核心原因很明确:datetime.strptime()的第二个参数需要匹配输入字符串的格式,而不是你想要输出的格式。你用了目标UTC格式的串%Y-%m-%dT%H:%M:%SZ去解析Thu Apr 26 22:51:49 PDT 2018,两者结构完全不匹配,自然会报错。

解决方案步骤

要完成从PDT字符串到UTC标准格式的转换,得按三步来:

  1. 用正确的格式串解析原PDT日期字符串
  2. 处理时区,把PDT时间转换为UTC时间
  3. 格式化成你需要的YYYY-MM-DDTHH:MM:SSZ格式

代码实现(Python 3.9+ 标准库)

Python 3.9及以上自带zoneinfo模块,不用额外装第三方库:

from datetime import datetime
from zoneinfo import ZoneInfo

# 获取你的原始日期字符串
raw_date = results[0].create_date  # 即 'Thu Apr 26 22:51:49 PDT 2018'

# 1. 解析原始字符串:格式串要完全匹配输入结构
# %a=星期缩写, %b=月份缩写, %d=日期, %H:%M:%S=时分秒, %Z=时区缩写, %Y=4位年份
parsed_dt = datetime.strptime(raw_date, "%a %b %d %H:%M:%S %Z %Y")
# 手动指定时区(Python对%Z解析部分时区缩写支持不稳定,PDT属于America/Los_Angeles时区)
parsed_dt = parsed_dt.replace(tzinfo=ZoneInfo("America/Los_Angeles"))

# 2. 转换为UTC时区
utc_dt = parsed_dt.astimezone(ZoneInfo("UTC"))

# 3. 格式化为目标UTC字符串格式
utc_str = utc_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
print(utc_str)  # 输出:2018-04-27T05:51:49Z(PDT是UTC-7,22:51+7小时=次日05:51)

兼容旧Python版本(用pytz)

如果你的Python版本低于3.9,先安装pytz库(pip install pytz),代码如下:

from datetime import datetime
import pytz

raw_date = results[0].create_date
parsed_dt = datetime.strptime(raw_date, "%a %b %d %H:%M:%S %Z %Y")
# 指定PDT对应的时区
pdt_tz = pytz.timezone("America/Los_Angeles")
parsed_dt = pdt_tz.localize(parsed_dt)

# 转UTC
utc_dt = parsed_dt.astimezone(pytz.utc)

# 格式化
utc_str = utc_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
print(utc_str)

补充说明

你提到“可忽略日期部分”,但要注意:PDT是UTC-7时区,原时间Thu Apr 26 22:51:49 PDT转换为UTC后会变成Fri Apr 27 05:51:49 UTC,日期会跨天。如果只是单纯想保持日期不变(不做实际时区转换),可以跳过时区转换步骤直接格式化,但这不符合UTC的实际时间标准,不推荐这么做。

内容的提问来源于stack exchange,提问作者Fenomatik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:16:27