ValueError:时间数据'2018-12-22T00:41:30.926932Z'格式'%Y-%m-%d%H:%M:%S'[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ValueError:时间数据'2018-12-22T00:41:30.926932Z'格式'%Y-%m-%d%H:%M:%S'[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我在将时间字符串转换为datetime对象时遇到了麻烦:我知道这个问题已被问过几次,但我无法找到解决问题的方法。
这是我的代码:
order['created'] = 2018-12-22T00:41:30.926932Z
created_at = datetime.datetime.strptime(order['created'],'%m/%d/%Y %H:%M:%S.%f').replace(tzinfo=pytz.utc).astimezone(local_tz)
这是我得到的错误信息
ValueError:时间数据'2018-12-22T00:41:30.926932Z'格式'%m /%d /%Y%H:%M:%S%f'
第一个问题是你有一个这种格式的ISO日期:2018-12-22T00:41:30.926932Z
,但你的代码传递给strptime()
的格式字符串指定一个美国式的日期,首先是月份和斜杠。
因此,而不是"%m/%d/%Y %H:%M:%S.%f"
你需要"%Y-%m-%dT%H:%M:%S.%f"
。
需要注意的事项:
- 年(
%Y
)排在第一位。 - 连字符不斜线。
T
在日期和时间之间,而不是空间。
第二个问题是数据以GMT的时区字符串Z
结尾,但您的代码不包括格式规范中的那些。适当的格式指令是%z
。所以,最后添加%z
以获得"%Y-%m-%dT%H:%M:%S.%f%z"
。
函数strptime()
是准确但不明亮的,并且无法解决格式规范与数据不匹配的问题。您得到的只是一条通用消息,表示数据与格式不匹配。此时,您需要返回文档以发现不匹配的位置。
最后,.replace(tzinfo=pytz.utc).astimezone(local_tz)
将无法工作,因为(除非你在代码中定义了local_tz
,你没有提供),引用local_tz
会产生NameError或AttributeError:我怀疑你想要的是tzlocal.get_localzone()
。您可能必须安装tzlocal
才能工作。 (还有其他方法可以做到这一点,但这种方式最接近您提供的代码。)
解决了这三个问题后,我得到了
>>> order['created'] = "2018-12-22T00:41:30.926932Z"
请注意,您需要围绕时间戳值的引号,这些引号必须在您的原始代码中才会生成您报告的错误消息,但不在您的问题中。始终发布提供错误消息的确切代码,而不是重新输入或编辑的版本。
>>> datetime.datetime.strptime(order['created'],'%Y-%m-%dT%H:%M:%S.%f%z').replace(tzinfo=pytz.utc).astimezone(tzlocal.get_localzone())
datetime.datetime(2018, 12, 22, 1, 41, 30, 926932, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
这是正确的,但可能与你的结果不符,因为我住在海牙。
在最好的时候使用日期很棘手,而且几乎总是需要对细节的关注程度令人惊讶。
以上是关于ValueError:时间数据'2018-12-22T00:41:30.926932Z'格式'%Y-%m-%d%H:%M:%S'[重复]的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:时间数据'1/1/17 0:03'与格式'%m /%d /%Y%H:%M'不匹配
ValueError("无法使用 `eval()` 评估张量:
写入excel数据报错:ValueError: Cannot convert {'code': 0, 'msg': 'login success!',
ValueError:无法配置处理程序“文件”:[Errno 13] 权限被拒绝: