gpt4 book ai didi

python - 带有冒号的时区偏移的日期时间 strptime 问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:50 25 4
gpt4 key购买 nike

目前我们正在开发一个应用程序,该应用程序尝试使用 2.db.transport.rest API 计算从 a 到 b 的路线的行程时间。

不幸的是,我们从该 API 接收带有时区偏移的时间戳,例如 +01:00 。我们需要的是没有 : 的时区偏移量,所以+0100 .

以下示例在使用 Python 3.6.7 的 Linux 上给出错误:

from datetime import datetime
datetimestring = "2019-01-19T15:13:00.000+01:00"
datetime.strptime(datetimestring, '%Y-%m-%dT%H:%M:%S.%f%z')

此示例代码产生此异常:

ValueError: time data '2019-01-19T15:13:00.000+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

如果我们删除:从输入字符串来看它有效,没有抛出异常。

当我们在 Windows 上的 Python 3.7.2 上运行该代码时,该代码也可以工作。

难道是Python版本不同的原因?我们如何解析或转换它而不出错?

最佳答案

是的,这是版本问题。您正在依赖 Python 3.7 中引入的新功能

来自datetime.strptime() documentation ,第六脚注:

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.

如果您无法在所有地方升级到 Python 3.7,那么您可以通过一些预处理删除这些冒号:

import re

datetimestring = re.sub(r'([-+]\d{2}):(\d{2})(?:(\d{2}))?$', r'\1\2\3', datetimestring)

正则表达式从任何 HH:MMHH:MM:SS 偏移量中删除冒号(出现在字符串末尾并以 -+ 开头):

演示:

>>> import re
>>> from datetime import datetime
>>> datetimestring = "2019-01-19T15:13:00.000+01:00"
>>> corrected = re.sub(r'([-+]\d{2}):(\d{2})(?:(\d{2}))?$', r'\1\2\3', datetimestring)
>>> corrected
'2019-01-19T15:13:00.000+0100'
>>> datetime.strptime(corrected, '%Y-%m-%dT%H:%M:%S.%f%z')
datetime.datetime(2019, 1, 19, 15, 13, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))

如果您要在任何地方升级到 Python 3.7,您可以完全放弃 strptime() 解析,而只需使用专用的 datetime.fromisoformat() method ;它可以直接解析您的输入。

>>> datetime.fromisoformat(datetimestring)
datetime.datetime(2019, 1, 19, 15, 13, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))

关于python - 带有冒号的时区偏移的日期时间 strptime 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54268458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com