Python中JSON字符串日期转datetime格式报错的解决方法
解决JSON时间戳转Python datetime的ValueError问题
问题根源
你遇到的错误是因为格式字符串符号使用错误,加上Python strptime 对微秒、时区格式的限制:
- 格式符混淆:
%y是两位年份(如22),你需要的四位年份应该用%Y;%M代表分钟,月份要改用%m;%m代表月份,分钟要改用%M。 %f仅支持6位微秒,但你的时间戳是7位(.9871548)。%z不支持带冒号的时区格式(如+08:00),仅识别+0800这类无冒号的格式。
解决方案
方案1:修正格式符并预处理时间戳
手动调整时间戳的微秒和时区格式,再用正确的格式字符串解析:
from datetime import datetime timestamp_str = "2022-12-30T16:27:56.9871548+08:00" # 截断7位微秒到6位,同时移除时区的冒号 split_dot = timestamp_str.split(".") processed_str = f"{split_dot[0]}.{split_dot[1][:6]}{split_dot[1][6:].replace(':', '')}" # 正确的格式字符串 fmt = "%Y-%m-%dT%H:%M:%S.%f%z" dt_obj = datetime.strptime(processed_str, fmt) print(dt_obj)
方案2:使用dateutil自动解析(更简便)
python-dateutil 库可以自动识别这类复杂时间格式,无需手动指定格式符:
from dateutil import parser timestamp_str = "2022-12-30T16:27:56.9871548+08:00" dt_obj = parser.parse(timestamp_str) print(dt_obj)
需要先安装库:
pip install python-dateutil
内容的提问来源于stack exchange,提问作者Amanda Choy Siew Wen
相关产品推荐
相关产品推荐

