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

PostgreSQL添加时区后Python strptime解析时间字符串报错求助

解决带时区的PostgreSQL datetime字符串解析ValueError问题

这个问题的核心是你用错了时区格式匹配符!

你原来用的 %Z 是用来匹配时区名称/缩写的(比如 CET、UTC 这类),但你的时间字符串里的时区是偏移量格式(+02:00),这时候应该用小写的 %z 来匹配。

直接修改格式字符串解决

把你的解析格式从 '%Y-%m-%d %H:%M:%S.%f+%Z' 改成 '%Y-%m-%d %H:%M:%S.%f%z' 就能正常解析了:

from datetime import datetime

time_str = '2018-05-02 11:52:26.108540+02:00'
dt = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S.%f%z')
print(dt)
# 输出:2018-05-02 11:52:26.108540+02:00

注意:%z 会自动匹配带符号的时区偏移量(包括 +HH:MM 或 -HH:MM),所以不需要在格式里额外加 + 符号。

更简便的方法:用fromisoformat(Python 3.7+)

如果你的Python版本在3.7及以上,推荐直接用 datetime.fromisoformat() 方法,它可以直接解析这种ISO标准的带时区时间字符串,完全不用手动写格式:

from datetime import datetime

time_str = '2018-05-02 11:52:26.108540+02:00'
dt = datetime.fromisoformat(time_str)
print(dt)

这个方法对各种ISO格式的时间字符串兼容性更好,还能省掉写格式字符串的麻烦。

针对JSON请求的处理建议

如果是在处理JSON请求时遇到这个问题,可以自定义一个JSON解码器,自动把字符串转换成带时区的datetime对象:

import json
from datetime import datetime

def datetime_decoder(obj):
    if isinstance(obj, str):
        try:
            return datetime.fromisoformat(obj)
        except ValueError:
            # 如果不是标准时间格式,返回原字符串
            pass
    return obj

# 示例:解析包含带时区时间的JSON
json_request = '{"event_time": "2018-05-02 11:52:26.108540+02:00"}'
parsed_data = json.loads(json_request, object_hook=datetime_decoder)
print(type(parsed_data['event_time']))  # 输出:<class 'datetime.datetime'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:10