Python 当字符串日期值的格式为2021-01-22T11:36:52.387000+时,如何将字符串日期转换为dateobject并获取年份;01:00和datetime?

Python 当字符串日期值的格式为2021-01-22T11:36:52.387000+时,如何将字符串日期转换为dateobject并获取年份;01:00和datetime?,python,python-dateutil,Python,Python Dateutil,我试过这个: timestamp = "2021-01-22T11:36:52.387000+01:00" timestampObject = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S') 但给了我一个错误: ValueError:未转换的数据仍然存在:.150000+01:00 其余的是什么?我如何转换其余的?“T”是什么意思?因为您还必须提供格式说明符来处理尾随微秒和时区说明符,就像错误告诉您的那样,请参见和。可

我试过这个:

 timestamp = "2021-01-22T11:36:52.387000+01:00"
 timestampObject = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S')
但给了我一个错误:

ValueError:未转换的数据仍然存在:.150000+01:00


其余的是什么?我如何转换其余的?“T”是什么意思?

因为您还必须提供格式说明符来处理尾随微秒和时区说明符,就像错误告诉您的那样,请参见和。可能您需要
'.fZ'
。请参阅datetime文档


此外,“T”只代表“时间”;它将日期字段与时间字段分开,以便于解析(使用sed/perl/grep/regex/etc)。如果您想a)在日志中查找日期时间,或b)丢弃/分离时间部分和日期部分,这将变得很容易。

因为您还必须提供格式说明符来处理尾随微秒和时区说明符,就像错误告诉您的那样,请参阅和。可能您需要
'.fZ'
。请参阅datetime文档


此外,“T”只代表“时间”;它将日期字段与时间字段分开,以便于解析(使用sed/perl/grep/regex/etc)。如果您想a)在日志中查找日期时间,或b)将时间部分与日期部分分开/丢弃,这将非常容易。

您使用的字符串格式实际上是ISO格式的日期时间。幸运的是datetime有一个处理该问题的函数,您不必担心为后续时间对象提供格式说明符

你只想要日期吗

>>> datetime.datetime.fromisoformat("2021-01-22T11:36:52.387000+01:00").date()
datetime.date(2021, 1, 22)
或者你想要约会时间

>>> datetime.datetime.fromisoformat("2021-01-22T11:36:52.387000+01:00")
datetime.datetime(2021, 1, 22, 11, 36, 52, 387000, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))

您拥有的字符串格式实际上是ISO格式的日期时间。幸运的是datetime有一个处理该问题的函数,您不必担心为后续时间对象提供格式说明符

你只想要日期吗

>>> datetime.datetime.fromisoformat("2021-01-22T11:36:52.387000+01:00").date()
datetime.date(2021, 1, 22)
或者你想要约会时间

>>> datetime.datetime.fromisoformat("2021-01-22T11:36:52.387000+01:00")
datetime.datetime(2021, 1, 22, 11, 36, 52, 387000, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))
这对我很有用:

timestampObject = datetime.fromisoformat(
 "2021-01-22T11:36:52.387000+01:00" ).date()

 print('timestampObject.year: ', timestampObject.year) 
年份:2021年

这对我很有用:

timestampObject = datetime.fromisoformat(
 "2021-01-22T11:36:52.387000+01:00" ).date()

 print('timestampObject.year: ', timestampObject.year) 
年份:2021年


时间戳是一个iso格式的字符串,当您只需调用'fromisoformat'@Boskosnitch:哦,好的,不知道iso包含的微秒数时,任何格式说明符都是多余的。是否保证处理所有时区说明符?这种格式2018-04-19T00:00:00+02:00与另一种格式有什么不同?datetime.fromisoformat不适用于此fromat。它说“参数必须是str”时间戳是一个iso格式的字符串,当你只需调用'fromisoformat'@Boskosnitch:哦,好吧,我不知道iso包含的微秒数时,任何格式说明符都是多余的。是否保证处理所有时区说明符?这种格式2018-04-19T00:00:00+02:00与另一种格式有什么不同?datetime.fromisoformat不适用于此fromat。上面写着“参数必须是str”谢谢,但它只有在我第一次删除datetime时才起作用。我不知道这是否是一个打字错误,或者是因为我使用的是python3,但是谢谢你的帮助:)这个格式2018-04-19T00:00:00+02:00和另一个有什么不同?datetime.fromisoformat不适用于此fromat。上面写着“参数必须是str”谢谢,但它只有在我第一次删除datetime时才起作用。我不知道这是否是一个打字错误,或者是因为我使用的是python3,但是谢谢你的帮助:)这个格式2018-04-19T00:00:00+02:00和另一个有什么不同?datetime.fromisoformat不适用于此fromat。它说“参数必须是str”