【问题标题】:Checking for equality of multiple fields of two datetime objects检查两个日期时间对象的多个字段是否相等
【发布时间】:2020-04-29 19:21:55
【问题描述】:

我想确保两个 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 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

但这有点重复。有没有更简洁的方法来做到这一点?

【问题讨论】:

  • stackoverflow.com/questions/31487732/… 可能重复尝试:assert time_a.replace(microsecond=0) == time_b.replace(microsecond=0)
  • 太完美了,谢谢。如果您将此作为答案,我会接受。

标签: python datetime python-datetime


【解决方案1】:

正如我在评论中提到的:

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

【讨论】:

    【解决方案2】:

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

    也就是说,

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

    当差值的绝对值小于一秒时,这是正确的,因此它可以有效地检查直到秒的相等性。这样做的好处是在datetime 对象中保持原始微秒级信息完整。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-06-28
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 2016-06-27
        • 1970-01-01
        相关资源
        最近更新 更多