Python使用strptime转换带时区时间戳触发ValueError如何解决?
问题根因
- 核心错误为年份格式化符不匹配:
%y仅支持匹配两位数字的年份(如21对应2021年),你输入的时间戳为四位完整年份2021,需要使用大写的%Y作为年份匹配符。 - 你猜测的时区冒号问题仅在Python 3.6及更早版本存在:Python 3.7及以上版本中,
%z已经原生支持±HH:MM格式的带冒号时区偏移,无需额外处理时区部分的冒号。
解决方案
方案1:适配Python 3.7+(推荐)
仅需将格式串中的%y替换为%Y即可正常解析:
from datetime import datetime ts = "2021-11-05 10:13:46+11:00" date_ts = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S%z") print(date_ts)
方案2:兼容Python 3.6及更早版本
需先处理时区部分的冒号,再进行解析:
from datetime import datetime ts = "2021-11-05 10:13:46+11:00" # 移除时区段的冒号 processed_ts = ts[:-3] + ts[-2:] date_ts = datetime.strptime(processed_ts, "%Y-%m-%d %H:%M:%S%z") print(date_ts)
方案3:自动解析(无需手动匹配格式)
如果不想手动核对格式串,可以使用第三方库python-dateutil的自动解析能力:
from dateutil import parser ts = "2021-11-05 10:13:46+11:00" date_ts = parser.parse(ts) print(date_ts)
内容的提问来源于stack exchange,提问作者user12011833
相关产品推荐
相关产品推荐

