我的程序有2个datetime
对象,一个存在,另一个是updated_at
,它是通过api获取的。目标很简单,将它们进行比较,并显示它多久之前进行了更新。
from datetime import datetime
from datetime import timedelta
import pytz
frontier_tz = pytz.timezone('UTC')
frontier_time = datetime.now(frontier_tz)
...
updated_at = '2020-05-07T07:16:39.000Z' # this value is provided by an api
updated_at = frontier_tz.localize(datetime.strptime(updated_at[0:16], '%Y-%m-%dT%H:%M'))
# since it's a string, it has to be converted into a datetime object
updated_ago = frontier_time - updated_at
updated_ago_text = str(updated_ago).split(':')[0]
# the result is something like "1 day, 2", then I add surrounding text
[这最后一段代码每30分钟更新一次循环的结果文本,它从api获取新数据并比较当前时间和updated_at
。
这里是问题:由于大多数对象每天都在更新,因此从updated_ago
中随机减去2天,在大多数情况下变为负数。]
我已经尝试调试它,并在结果为负数的情况下增加了2天:
if updated_ago < timedelta(seconds=0): print('ALERT!', updated_ago) updated_ago += timedelta(days=2) print(updated_ago) updated_ago += timedelta(days=-2)
结果更加令人沮丧。我花了几天的时间进行测试(因为这个错误是随机出现的)。例如,假设
updated_ago
为“ 1小时”。当添加2天时,updated_ago
突然解除调试,将2天添加到正确的值,然后变为“ 2天1小时”,如果再次减去2天,则从正确的值“中减去” 1小时”,然后变为“ -2天23小时”。
以下是此错误的最新实例的打印输出:
ALERT! -1 day, 23:54:04.378389
1 day, 23:54:04.378389
我的程序有2个datetime对象,一个存在,另一个是update_at,它通过api获取。目标很简单,将它们进行比较并显示更新了多久。从日期时间导入...
尽管此错误很奇怪,但解决方案更加奇怪。我的情况适用,因为最终值不可能超过24小时,但在其他情况下可能不起作用: