提问人:K P 提问时间:8/9/2023 更新时间:8/10/2023 访问量:67
将字符串 datetime 与 ISO 日期时间格式进行比较
Compare string datetime with ISO datetime format
问:
我正在尝试将 ISO DateTime 与 Python 代码中的字符串 datetime 进行比较。我在 Azure 云的 JSON 响应中获取日期时间,我需要将其与日期时间之前的最后 24 小时进行比较。我被困在字符串到日期时间的转换中。
代码如下
from datetime import datetime, timedelta
target_date = datetime.now() - timedelta (hours=24)
print(target_date.isoformat())
print(type(target_date))
createdOn = "2022-10-25T21:41:27.2824196Z"
post_time = datetime.strptime(createdOn, "%Y-%m-%dT%H:%M:%S.%f%z")
print(post_time)
我需要比较/检查 createdOn 是否大于 target_date。运行代码时,我出现以下错误
2023-08-07T13:22:11.914140
<class 'datetime.datetime'>
Traceback (most recent call last):
File "/Users/Documents/GitHub/Mylabs/mytest.py", line 10, in <module>
post_time = datetime.strptime(createdOn, "%Y-%m-%dT%H:%M:%S.%f%z")
File "/Users/.pyenv/versions/3.8.17/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/Users/.pyenv/versions/3.8.17/lib/python3.8/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '2022-10-25T21:41:27.2824196Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
答:
您可能会发现使用 python-dateutil
表单 PyPI 进行日期解析更容易。这将解析绝大多数已知的日期格式,并让您更轻松一些。
一旦安装在 PyPI 中,它可以很容易地使用,如下所示:
from datetime import datetime, timedelta, timezone
# Done by answerer for easier reference in code.
from dateutil.parser import parse as dateparse
target_date = datetime.now().astimezone(timezone.utc) - timedelta (hours=24)
print(target_date.isoformat())
print(type(target_date))
createdOn = "2022-10-25T21:41:27.2824196Z"
post_time = dateparse(createdOn)
print(post_time)
实际上,它消除了手动解析的麻烦,这样您就知道它将正确解析日期时间格式并“正常工作”使用不同格式的时间戳。虽然它不能解决您的问题,但它可以更轻松地解析日期和时间戳。(这只是可以做的众多事情之一,但它做得很好)strptime
dateutil
由于 的 解析器函数返回一个 datetime 对象,因此您实际上可以直接比较这两个 s。但是,您应该确保target_date的时间是(这就是导入中时区的原因),以确保您比较的是两个时区感知时间。dateutil
datetime
datetime.now.astimezone(timezone.utc)
datetime
然后你可以直接比较它们。
print(target_date > post_time)
例如,如果晚于或等于 ,则打印布尔值。target_date
post_time
Python 3.11 及更高版本具有更易于转换的机制,但是如果您使用较早的任何内容(如 Python 3.8),则 using 将是更好的解析器方法。fromisoformat
dateutil
评论