求助:将特定字符串日期转换为UTC格式的Python技术问题
解决Python日期格式转换的ValueError问题
问题原因分析
你遇到的ValueError核心原因很明确:datetime.strptime()的第二个参数需要匹配输入字符串的格式,而不是你想要输出的格式。你用了目标UTC格式的串%Y-%m-%dT%H:%M:%SZ去解析Thu Apr 26 22:51:49 PDT 2018,两者结构完全不匹配,自然会报错。
解决方案步骤
要完成从PDT字符串到UTC标准格式的转换,得按三步来:
- 用正确的格式串解析原PDT日期字符串
- 处理时区,把PDT时间转换为UTC时间
- 格式化成你需要的
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
相关产品推荐
相关产品推荐

