Python处理带时区时间字符串时出现格式不匹配错误
解决方法
错误原因
你遇到的问题有两个:
- 格式字符串中
%S.%f后多了一个空格,但你的时间字符串里毫秒部分后直接跟时区偏移(+00:00),没有空格; - 你用了
%Z格式符,它用来匹配时区名称(比如UTC、EST),但你的时间字符串末尾是+00:00这种数值型时区偏移,对应正确的格式符是小写的%z。
修正方案
方案一:直接使用数据库返回的datetime对象(推荐)
Django的DateTimeField查询后返回的本身就是datetime对象,不需要转成字符串再解析,简化代码:
utc = Rawdata.objects.filter(id=r).values_list('created_at', flat=True).first()
方案二:修正格式字符串解析
如果必须处理字符串形式的时间,把格式字符串改成%Y-%m-%d %H:%M:%S.%f%z:
from datetime import datetime # 假设你已经拿到了时间字符串 time_str = '2022-12-29 11:47:07.444185+00:00' utc = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S.%f%z')
兼容低Python版本(3.7以下)
如果你的Python版本低于3.7,%z不支持带冒号的时区格式(+00:00),需要先去掉时区部分的冒号:
from datetime import datetime time_str = '2022-12-29 11:47:07.444185+00:00' # 移除时区里的冒号,变成+0000 time_str_fixed = time_str[:-3] + time_str[-2:] utc = datetime.strptime(time_str_fixed, '%Y-%m-%d %H:%M:%S.%f%z')
内容的提问来源于stack exchange,提问作者Gnani Kim
相关产品推荐
相关产品推荐

