带有冒号的时区偏移的日期时间strptime问题[重复]

2024-01-09

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

不幸的是,我们收到的时间戳带有来自该 API 的时区偏移量,例如+01:00。我们需要的是没有时区偏移:, so +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()文档 https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior,第6脚注:

3.7版本更改: 当。。。的时候%z指令提供给strptime()方法中,UTC 偏移量可以使用冒号作为小时、分钟和秒之间的分隔符。例如,'+01:00:00'将被解析为一小时的偏移量。

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

import re

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

正则表达式删除任何冒号HH:MM or HH:MM:SS偏移量(出现在 字符串的末尾,前面是- or +):

Demo:

>>> 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 https://docs.python.org/3/library/datetime.html#datetime.time.fromisoformat;它可以直接解析您的输入。

>>> datetime.fromisoformat(datetimestring)
datetime.datetime(2019, 1, 19, 15, 13, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有冒号的时区偏移的日期时间strptime问题[重复] 的相关文章

随机推荐

  • XMLWriter 使用 zdef 扩展属性名称?

    我尝试使用 XMLMapper 将一些配置类序列化为 xml 配置文件 但我在属性生成方面遇到了一些麻烦 实际上生成的 XML 是完美的 但 XMLMapper 有时会在我的属性名称中添加前缀 e g
  • Ruby、Tor 和 Net::HTTP::Proxy

    如果这是一个幼稚的疑问 我提前道歉 我想在我的 Ruby 代码中使用代理来获取一些网页 我想偷偷摸摸地做这件事 所以我正在使用 Tor 我正在运行 Tor 并且可以像往常一样使用 Net HTTP get uri 但我不知道如何使用 Net
  • Web 浏览器支持 Windows Embedded、Windows CE、Windows Mobile? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为客户开发基于网络的库存解决方案 其中将涉及手持移动数据终端 我从未开发过在这些设备的浏览器上运
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic
  • Python:将文本分割成单独的英文句子;保留标点符号[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试创建一个函数 将字符串 文本作为参数 返回文本中的句子列表 句子边界如 不应该被删除 我不希望它在缩写上分开
  • PHP 中的远程调试和内存分析

    两个问题 我如何远程调试服务器上的 PHP 代码 目前我正在使用 var dump 检查变量的值 我如何查看服务器上远程执行特定函数需要多少内存和多少时间 对此有什么好的分析器建议吗 Note 我说的是远程位于服务器上的代码 正如其他人所说
  • 检测 JComboBox 编辑

    我有一个 JComboBox 每秒一次 我想从数据库中检索一组字符串 并将这些字符串设置为 JComboBox 的内容 并将其中一个作为当前选定的值 但我还希望用户能够编辑 JComboBox 并向数据库添加值并将其设置为当前值 我希望能够
  • Zappa 部署错误 - 对流层==2.7.1 没有帮助 AttributeError:“模板”对象没有属性“add_description”

    我已将 python 项目从 2 7 迁移到 3 8 我正在尝试使用 zappa 进行部署 但是 一旦开始更新 Lambda 函数配置 就会遇到此错误 Updating Lambda function configuration Oh no
  • 如何对现有文件多次运行 blob 存储触发器

    我想在现有文件上连续运行我的 blob 存储触发器以进行测试 但是在触发器在文件上运行一次后 我无法让它在这些现有文件上再次运行 此消息是我在日志中收到的消息 Blob some file will be skipped for funct
  • 如何更改 ILoggerFacade 实现以使用 CallerMemberName 属性跟踪调用者方法?

    我正在尝试将日志记录功能实现到我的新 WPF 4 5 CompositeWPF Prism 项目中 这需要我在代码中实现 ILoggerFacade 该接口只实现了1个方法 Log string message Category categ
  • Oracle中如何做到top 1? [复制]

    这个问题在这里已经有答案了 我该如何执行以下操作 select top 1 Fname from MyTbl In 甲骨文11g https en wikipedia org wiki Oracle Database Version num
  • C# Wpf 编辑 Datagrid 不会更新其项目源

    我有一个像这样的 ObservableCollection ObservableCollection
  • Foreach 与普通 for 循环

    我刚刚开始学习Java 我遇到的第一件事就是foreach循环 不知道它是如何工作的 我做的第一件事是 int array new int 10 for int i array i 1 而且显然分配失败1到数组的每个元素 然后我添加了Sys
  • bash 中嵌套命令的 Heredoc

    我需要 ssh 进入一台机器并在下面执行一堆命令sudo bash 这是我尝试过的 sshpass p vagrant ssh email protected cdn cgi l email protection sudo bash i c
  • 快速迭代 Outlook 约会项目

    我编写了一个宏 它会迭代用户日历并对满足特定条件的条目进行修改 问题是 当日历很大时 这需要很长时间才能完成 我似乎无法过滤约会 因为oAppointmentItems似乎在创建条目时存储条目 这不一定与它们启动时的顺序相同 我正在使用的代
  • Meteor:尝试使用 node-gd 访问图像时出现错误:ENOENT

    我不明白为什么会收到此 错误 ENOENT 错误 这是我的 Meteor 服务器方法 createImage function coords console log createImage console log coords area c
  • 安装 zsh 并更改字体样式后,我的 VS Code 终端字体很小

    如果你看一下 VS Code 终端 它太小了 以下是我为创建此结果而修改的用户设置 我已经搜索了如何在 VS Code 中更改终端字体 但我已遵循与terminal integrated fontSize这根本没有帮助 它只会拉长队伍 请告
  • 如何在 Mapbox 3.6 中旋转汽车标记图像?

    我想根据路线方向旋转标记图像 我已经使用 Map box SDK 实现了地图 坐标和方向是通过网络服务获取的 我尝试了 imageForMarker 但没有成功 实现如下 func mapView mapView MGLMapView im
  • 请求 https://registry.npmjs.org/co 失败

    If I do npm install在我的存储库中 我收到以下错误 npm ERR code UNABLE TO GET ISSUER CERT LOCALLY npm ERR errno UNABLE TO GET ISSUER CER
  • 带有冒号的时区偏移的日期时间strptime问题[重复]

    这个问题在这里已经有答案了 目前我们正在开发一个应用程序 该应用程序尝试使用 2 db transport rest API 计算从 a 到 b 的路线的旅行时间 不幸的是 我们收到的时间戳带有来自该 API 的时区偏移量 例如 01 00