Python timedelta更新随机减去2天

问题描述 投票:0回答:1

我的程序有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获取。目标很简单,将它们进行比较并显示更新了多久。从日期时间导入...

python datetime timedelta pytz
1个回答
0
投票

尽管此错误很奇怪,但解决方案更加奇怪。我的情况适用,因为最终值不可能超过24小时,但在其他情况下可能不起作用:

© www.soinside.com 2019 - 2024. All rights reserved.