带有 tz 偏移量的日期时间的 strptime 示例
strptime example for datetime with tz offset
我有日期时间字符串 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+???')
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()
您可以将单独的 date
、time
和 tzinfo
对象组合成一个 datetime
,如果您需要的话,如下所示:
dt = datetime.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo)
print(dt)
结果:
2020-10-23 11:50:19+00:00
您正在寻找 %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 版本兼容性说明:
Changed in version 3.7: When the %z
directive is provided to the strptime()
method, the UTC offsets can have a colon as a separator between hours, minutes and seconds. For example, '+01:00:00'
will be parsed as an offset of one hour. In addition, providing 'Z'
is identical to '+00:00'
.
更稳健的方法,它不是 strptime
,但自 Python 3.7:
以来它仍在 stdlib 中
>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00')
datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
作为 documented 此函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
其中 * 可以匹配任何单个字符(不仅仅是 T)。
我有日期时间字符串 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+???')
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()
您可以将单独的 date
、time
和 tzinfo
对象组合成一个 datetime
,如果您需要的话,如下所示:
dt = datetime.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo)
print(dt)
结果:
2020-10-23 11:50:19+00:00
您正在寻找 %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 版本兼容性说明:
Changed in version 3.7: When the
%z
directive is provided to thestrptime()
method, the UTC offsets can have a colon as a separator between hours, minutes and seconds. For example,'+01:00:00'
will be parsed as an offset of one hour. In addition, providing'Z'
is identical to'+00:00'
.
更稳健的方法,它不是 strptime
,但自 Python 3.7:
>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00')
datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
作为 documented 此函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
其中 * 可以匹配任何单个字符(不仅仅是 T)。