如何解决我如何使用datetime.strptime解析'2020-07-30T20:40:33.1000000Z'
我正在尝试在Python中解析和转换“ 2020-07-30T20:40:33.1000000Z”:
from datetime import datetime
Data = [{'id': 'XXXXXXXXXXXXX','number': 3,'externalId': '0000','dateCreated': '2020-07-30T20:40:33.1005865Z','dateUpdated': '2020-07-30T20:40:33.36Z'}],'tags': []}]
for i in Data:
creationtime= datetime.strptime(i["dateCreated"],"%Y-%m-%dT%H:%M:%S")
错误:
raise ValueError("unconverted data remains: %s" %
ValueError: unconverted data remains: .1005865Z
我尝试过:
%Y-%m-%dT%H:%M:%S.%fZ
任何人都可以建议我所缺少的正确格式。
解决方法
如果您确实有7个小数秒的小数位,并且不在乎微秒的1/10 ,则可以使用re.sub
和datetime.fromisoformat
:
import re
from datetime import datetime
s = "2020-07-30T20:40:33.1000000Z"
dt = datetime.fromisoformat(re.sub('[0-9]Z','+00:00',s))
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
datetime.datetime(2020,7,30,20,40,33,100000,tzinfo=datetime.timezone.utc)
...或使用dateutil
的解析器:
from dateutil import parser
dt = parser.parse(s)
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
datetime.datetime(2020,tzinfo=tzutc())
...或者甚至是pandas
的to_datetime,如果您仍然可以使用该lib:
import pandas as pd
dt = pd.to_datetime(s)
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
Timestamp('2020-07-30 20:40:33.100000+0000',tz='UTC')
通常不相关(取决于用例),但请注意,便捷性会花费您更多时间:
%timeit datetime.fromisoformat(re.sub('[0-9]Z',s))
1.92 µs ± 151 ns per loop (mean ± std. dev. of 7 runs,1000000 loops each)
%timeit parser.parse(s)
79.8 µs ± 3.46 µs per loop (mean ± std. dev. of 7 runs,10000 loops each)
%timeit pd.to_datetime(s)
62.4 µs ± 1.17 µs per loop (mean ± std. dev. of 7 runs,10000 loops each)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。