检查两个日期时间对象的多个字段是否相等
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
我想确保两个日期时间对象具有相同的日期和时间(精确到秒)。
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