带有冒号的时区偏移量的Datetime strptime问题

2024-10-01 17:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我们正在开发一个应用程序,它试图计算从a到b的路线的旅行时间,使用2。运输休息区应用程序编程接口。在

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

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

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

此示例代码生成以下异常:

^{pr2}$

如果我们从工作的输入字符串中删除:,则不会引发异常。在

当我们在Windows上运行python3.7.2时,代码也可以工作。在

可能是因为不同的Python版本?我们怎样才能不出错地解析或转换它呢?在


Tags: fromimportapi应用程序示例datetimelinux编程
1条回答
网友
1楼 · 发布于 2024-10-01 17:33:01

是的,这是版本问题。您依赖于python3.7中引入的一个新特性

摘自^{} documentation,第6个脚注:

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偏移量中删除冒号(出现在 字符串结尾,前面加-+):

演示:

^{pr2}$

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

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

相关问题 更多 >

    热门问题