Python 如何解析';2020-07-30T20:40:33.1000000Z';使用datetime.strTime

Python 如何解析';2020-07-30T20:40:33.1000000Z';使用datetime.strTime,python,datetime,Python,Datetime,我正在尝试用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': []}]

我正在尝试用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, 7, 30, 20, 40, 33, 100000, tzinfo=tzutc())
…或者甚至是熊猫的日期时间,如果你可能使用该库的话:

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)

改为使用
dateutil
。根据文档,%f解析6位数字,而您试图解析7位数字,可能类似于-顺便说一句,你确定它是小数点后7位而不是6位吗?是的,日期看起来像“2020-07-30T20:40:33.1005865Z”谢谢你的回答,弗佩斯先生,我怎样才能把它转换成
%m/%d/%Y%H:%m:%s
日期时间之后的
datetime.fromisoformat(re.sub('[0-9]Z','+00:00',case[“dateCreated”])
@AshishBansal:只需追加
.strftime('%m/%d/%Y:%s'))
对于代码行,我尝试了同样的方法,并将其与其他日期进行比较,但它给了我错误
TypeError:“>”在'str'和'datetime.datetime'实例之间不受支持。
我使用的条件是:
如果creationtime>lastruntime:
@AshishBansal:您只能将str与str或datetime与datetime进行比较。不要混淆,这就是错误所说的。我建议将datetime与datetime进行比较-这可能意味着您不应该使用
strftime
强制转换到str。