带tz偏移量的日期时间的strptime示例

问题描述

我有日期时间字符串2020-10-23T11:50:19+00:00。我可以不使用时区将其解析为:

>>> datetime.strptime('2020-10-23T11:50:19','%Y-%m-%dT%H:%M:%s')
datetime.datetime(2020,10,23,11,50,19)

但是我无法使用时区的00:00版本来解析它。正确的方法是什么?

>>> datetime.strptime('2020-10-23T11:50:19+00:00','%Y-%m-%dT%H:%M:%s+???')

解决方法

您正在寻找%z:

>>> datetime.strptime('2020-10-23T11:50:19+00:00','%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2020,10,23,11,50,19,tzinfo=datetime.timezone.utc)

当心一些Python版本的兼容性说明:

在3.7版中进行了更改:%z指令提供给strptime()方法时,UTC偏移量可以用冒号作为小时,分钟和秒之间的分隔符。例如,'+01:00:00'将被解析为一小时的偏移量。此外,提供'Z''+00:00'相同。

更强大的方法,它不是strptime,但自Python 3.7起仍在stdlib中:

>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00')
datetime.datetime(2020,tzinfo=datetime.timezone.utc)

documented一样,此函数支持以下格式的字符串:

YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]

其中*可以匹配任何单个字符(不仅仅是T)。

,

dateutil.parser函数将解析该时区格式:

from dateutil.parser import parse

dt = parse('2020-10-23T11:50:19+00:00')
print(dt.date())
print(dt.time())
print(dt.tzinfo)

结果:

2020-10-23
11:50:19
tzutc()

如果需要,可以将单独的datetimetzinfo对象组合成datetime,例如:

dt = datetime.combine(dt.date(),dt.time(),tzinfo=dt.tzinfo)
print(dt)

结果:

2020-10-23 11:50:19+00:00

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...