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

How to convert string date to dateobject and get the year when string date value is in format 2021-01-22T11:36:52.387000+01:00 with datetime?

我试过这个:

 timestamp = "2021-01-22T11:36:52.387000+01:00"
 timestampObject = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S')

但是给了我错误:

ValueError: unconverted data remains: .150000+01:00

其余部分代表什么,如何转换其余部分?还有 'T' 是什么意思?

因为您还必须 提供一个格式说明符来处理尾随的微秒和时区说明符,就像错误告诉您的那样,请参阅 Conversion of datetime string with microseconds and 。可能你需要 '.fZ'。请参阅日期时间文档。

此外,'T' 仅代表 'Time';它将日期字段与时间字段分开,以便于解析(sed/perl/grep/regex/etc)。如果您想 a) 在日志中找到日期时间或 b) 从日期部分抛出 away/separate 时间部分,这将变得很容易。

您的字符串格式实际上是 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) 

timestampObject.year: 2021