检查两个日期时间对象的多个字段是否相等

Checking for equality of multiple fields of two datetime objects

我想确保两个日期时间对象具有相同的日期和时间(精确到秒)。

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 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

但这有点重复。有更简洁的方法吗?

删除微秒将解决您的问题:

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

您可以使用 timedelta 检查时间差异是否小于一秒。

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

只要差异的绝对值小于一秒,就会出现这种情况,因此它会有效地检查秒数是否相等。这具有在 datetime 对象中保持原始微秒级信息完整的优点。

如我的评论所述:

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