Dav*_*rez 1 python datetime strptime
我在将时间字符串转换为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)
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息
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 在日期和时间之间,而不是空格之间。第二个问题是,数据Z以GMT 的时区字符串结尾,但是您的代码未在格式规范中包含该字符串。正确的格式指令是%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"
Run Code Online (Sandbox Code Playgroud)
请注意,您需要在时间戳记值前后加上引号,该引号必须已包含在原始代码中才能生成您报告的错误消息,但不在您的问题中。始终张贴给出错误消息的确切代码,而不是重新输入或编辑的版本。
>>> 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>)
Run Code Online (Sandbox Code Playgroud)
正确,但可能会与您的结果不符,因为我住在海牙。
在大多数情况下,使用日期进行操作是很棘手的,几乎总是需要对细节的关注程度令人惊讶。
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |