datetime.strptime을 사용하여 '2020-07-30T20 : 40 : 33.1000000Z'를 어떻게 구문 분석 할 수 있습니까?
파이썬에서 "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
누구든지 내가 놓친 올바른 형식을 제안 해 주시겠습니까?
답변
2 MrFuppes
당신이 경우 정말 소수 초 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, 7, 30, 20, 40, 33, 100000, tzinfo=tzutc())
... 또는 pandas
어쨌든 해당 lib로 작업하는 경우 to_datetime입니다.
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', '+00:00', 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)