python - 如何在分号后没有指定秒数的 Z 字母解析日期时间
问题描述
我正在解析该程序的日志,但未访问该程序的源代码。
日志在日志记录中包含一个有趣的事件时间戳 -
2018-11-02T06:25:03870000Z
。这对我来说看起来很奇怪,我不知道它有多正确。但我倾向于认为03974200Z
描述了一个 seconds ( %s
) 部分,我想尽可能多地从这个记录中收集信息。
我正在尝试从 Python 3.7 解析这个示例,如下所示:
d = '2018-11-02T06:25:03870000Z'
dt.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S')
它会产生一个可预测的错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: 870000Z
更新:我对此有肮脏的解决方案,但如果有比这更好的方法来做这样的操作:
sc = d.split(':')[-1][:2]
dd = d.split(':')
en = ':'.join(dd[:-1])
en += ':' + sc
>> en
'2018-11-02T06:25:03'
问题:
- 如何正确解析这样的日期时间(
03
在示例中确定为秒的一部分)? - (可选) Idk。但是日志中的这个日期时间示例是否正确(就 ISO 或其他方面而言)?
解决方案
Z 指定祖鲁时区(UTC 或 GMT),秒数以整秒 (03) 后跟微秒 (870000) 的形式给出,因此您可以使用以下方法完全解析日期:
d = '2018-11-02T06:25:03870000Z'
dt.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%fZ')
推荐阅读
- sql-server - 如何在环回 where 子句中使用正则表达式 - 连接到 SQL Server 数据源?
- vue.js - 如何从单个子组件生成表中的动态组件?
- react-native - React Native expo 相机无法正确查看拍摄的照片
- php - PHP语法错误意外'foreach'(T_FOREACH) - 不是缺少分号问题
- windows - 在 Docker 中拉取基础镜像的位置
- php - 以编程方式将自定义帖子添加到自定义分类
- r - 如何在 R 中使用 tmap 向地图添加附加评论?
- listview - 如何防止 Flutter ListView 中的 AnimatedWidgets 全部一起移动
- ios - Swift & Firebase - 添加更多“标题”
- reactjs - 将值传递给父组件时,Formik Form 内的按钮 onClick 不会产生预期值