解析自定义datetime格式并转换为UTC时区的技术求助
带时区偏移的Datetime字符串转UTC解决方案
你的代码报错ValueError: unconverted data remains: -05:00,核心原因是strptime的格式字符串没有包含时区偏移部分,原字符串末尾的时区信息未被解析。下面是两种可行的解决方法:
方法一:使用Python内置的%z格式符(Python 3.2+)
直接在格式字符串中添加%z来匹配±HH:MM格式的时区偏移,解析出带时区感知的datetime对象后再转UTC:
from datetime import datetime import pytz raw_dt = "2016-12-01T23:59:29-05:00" # 格式字符串加入%z解析时区偏移 parsed_dt = datetime.strptime(raw_dt, "%Y-%m-%dT%H:%M:%S%z") # 转换为UTC时区 utc_dt = parsed_dt.astimezone(pytz.utc) print(utc_dt)
方法二:用python-dateutil自动解析(兼容更多格式)
如果遇到月份/日期是单数字的情况(比如2018-2-1T13:50:29-04:00),strptime的%m/%d要求两位数字,此时用dateutil库能自动识别格式,无需手动指定:
- 先安装依赖:
pip install python-dateutil - 代码示例:
from datetime import datetime from dateutil import parser import pytz raw_dt = "2018-2-1T13:50:29-04:00" # 自动识别日期格式和时区偏移 parsed_dt = parser.parse(raw_dt) # 转换为UTC时区 utc_dt = parsed_dt.astimezone(pytz.utc) print(utc_dt)
注意事项
- 使用
%z格式符需确保Python版本≥3.2; - 只有带时区感知的datetime对象才能调用
astimezone()方法转换时区,否则会抛出ValueError。
内容的提问来源于stack exchange,提问作者Cheeku Jee
相关产品推荐
相关产品推荐

