python-3.x - 将带有微秒的字符串日期时间转换为日期对象
问题描述
我有一个datetime
来自 json 数据的2017-03-28T00:00:00.000Z
我试过这个
datetime.datetime.strptime(record_date, "%Y-%m-%d%H:%M:%S%f")
但这会产生错误:
*** ValueError:时间数据 '2017-03-28T00:00:00.000Z' 与格式 '%Y-%m-%d%H:%M:%S%f' 不匹配
我必须将读取日期与用户输入日期作为2017-03-28
格式进行比较
解决方案
您的时间是 isoformat,您需要使用 datetime 的 fromisoformat 将其转换为 datetime 对象。
[:-1] 是为了排除 Z 因为 datetime 不明白那是什么。(2017-03-28T00:00:00.000Z 实际上是 RFC 3339)
Z 基本上表示 UTC 时区(格林威治标准时间 +00:00)
from datetime import datetime
foo = "2017-03-28T00:00:00.000Z"
bar = datetime.fromisoformat(foo[:-1])
print(bar)
print(type(bar))
给你的结果,但这现在很天真(不知道时区)
2017-03-28 00:00:00
<class 'datetime.datetime'>
使其时区感知的快速解决方法是
bar = datetime.fromisoformat(foo.replace('Z', '+00:00'))
print(bar)
2017-03-28 00:00:00+00:00
#If milliseconds are of concern then just strftime
bar = datetime.fromisoformat(foo.replace('Z', '+00:00')).strftime("%Y-%m-%d %H:%M:%S:%f %Z")
# the Z displays UTC or equivalent time zone
2017-03-28 00:00:00:000000 UTC
dateutil 模块更擅长处理这个问题,因为它对 RFC 3339 有原生支持。
import dateutil.parser
foo = "2017-03-28T00:00:00.000Z"
bar = dateutil.parser.isoparse(foo)
print(bar)
print(type(bar))
2017-03-28 00:00:00+00:00
<class 'datetime.datetime'>
推荐阅读
- html - React Router 在 bluehost 上给了我 404 错误
- airflow - 在 DAG 中执行算子实例之前执行代码块
- android - 在Android中打开默认文件夹路径?
- html - 调整文本框的高度
- java - 在 ArrayList 中查找最低的 8 个值并在 TextView 中突出显示这些值
- tensorflow - Tensorflow.js 中预测的输出总是显示第一个示例
- css - Woocommerce 产品描述在页面顶部重复两次
- javascript - 如果数据中的值为零,chart.js 工具提示不会出现
- azure - reportRoot: getSharePointActivityUserDetail 用户主体名称(返回为 GUID)是什么意思?
- c# - WPF 图像出现在设计器中,但不在运行时