В моей программе 2 datetime
объекта, один присутствует, другой - updated_at
, который он получает через api. Цель проста: сравнить их и показать, как долго go он обновлялся.
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
Этот последний фрагмент кода обновляет результирующий текст на al oop каждые 30 минут, где он получает новые данные. из api и сравнивает текущее время и updated_at
.
Вот проблема: случайным образом вычитается 2 дня из updated_ago
и в большинстве случаев становится отрицательным, поскольку большинство объектов обновляется ежедневно.
Попробовал отладить и добавить 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