如何将带时区的日期字符串转换为 python 中的日期时间

How to convert date string with timezone to datetime in python

我需要比较两个日期字符串,为此,我需要将日期字符串转换为日期时间对象。日期字符串的示例是“2015-08-23T03:36:30-05:00”。我假设“-05:00”是时区字符串。我可以使用以下方法将字符串转换为日期时间:

import datetime

str = '2015-08-23T03:36:30-05:00'

datetime.datetime.strptime(str,"%Y-%m-%dT%H:%M:%S-%f:00")

我可以看到 microsecond 的值是 50000 这对我来说似乎是错误的,因为 -5:00 值是时区。当我将比较两个日期时间时,正确的解析方法是什么?

您可以使用 %z 来解析时区信息:

>>> from datetime import datetime, timezone
>>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z")
datetime.datetime(2015, 8, 23, 3, 36, 30, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400)))

然后,如果您想将此日期时间转换为 UTC(我假设这是您的目标,因为您说您想要比较日期时间),您可以使用 astimezone 方法:

>>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z").astimezone(timezone.utc)
datetime.datetime(2015, 8, 23, 8, 36, 30, tzinfo=datetime.timezone.utc)

返回字符串格式:

>>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z").astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
'2015-08-23 08:36:30'