Проверка на равенство нескольких полей двух объектов datetime - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу убедиться, что два объекта datetime имеют одинаковую дату и время с точностью до секунд.

from datetime import datetime

time_a = datetime(2020, 4, 29, 3, 14, 15, 9)
time_b = datetime(2020, 4, 29, 3, 14, 15, 10)

Я не могу просто сделать assert time_a == time_b, поскольку они имеют разные микросекунды.

Я мог бы сделать это с помощью нескольких операторов assert:

assert time_a.year == time_b.year
assert time_a.month == time_b.month
assert time_a.day == time_b.day
assert time_a.hour == time_b.hour
assert time_a.minute == time_b.minute
assert time_a.second == time_b.second

Но это немного повторяется. Есть ли более краткий способ сделать это?

Ответы [ 3 ]

1 голос
/ 29 апреля 2020

Вы можете проверить, что разница во времени составляет менее одной секунды, используя timedelta.

То есть

abs(time_a-time_b) < timedelta(seconds=1)

Это верно, когда абсолютное значение разности меньше одной секунды, поэтому эффективно проверяет равенство с точностью до секунд. Это дает преимущество в сохранении исходной информации микросекундного уровня в неизменном виде в объектах datetime.

1 голос
/ 29 апреля 2020

Как уже упоминалось в моем комментарии:

from datetime import datetime

time_a = datetime(2020, 4, 29, 3, 14, 15, 9).replace(microsecond=0)
time_b = datetime(2020, 4, 29, 3, 14, 15, 10).replace(microsecond=0)

assert time_a == time_b
0 голосов
/ 29 апреля 2020

Удаление микросекунд решит вашу проблему:

time_a.replace(microsecond=0) == time_b.replace(microsecond=0)
...