我如何使用datetime.strptime解析'2020-07-30T20:40:33.1000000Z' [英] How can I parse '2020-07-30T20:40:33.1000000Z' using datetime.strptime

查看:221
本文介绍了我如何使用datetime.strptime解析'2020-07-30T20:40:33.1000000Z'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Python中解析和转换 2020-07-30T20:40:33.1000000Z:

I am trying to parse and convert "2020-07-30T20:40:33.1000000Z"in Python:

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

任何人都可以建议我所缺少的正确格式

Can anyone please suggest the correct format that I am missing.

推荐答案

如果您确实有7个小数秒的小数位,并且大约需要1/10微秒,您可以使用 re.sub d datetime.fromisoformat

if you really have 7 decimal places of fractional seconds and don't care about the 1/10th of the microseconds, you could use a re.sub and 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 解析器:

...or use dateutil's parser:

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 的to_datetime,如果您仍然可以与该lib一起使用:

...or even pandas's to_datetime, if you maybe work with that lib anyway:

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')




通常无关紧要(取决于用例),但请注意,便捷性会花费您更多时间:


often irrelevant (depending on use-case) but note that convenience costs you some more time:

%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)

这篇关于我如何使用datetime.strptime解析'2020-07-30T20:40:33.1000000Z'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆