20

我将 date_added 日期时间值插入到不支持 datetime(6) 的 mysql 5.5 中,这在运行以下单元测试时导致 AssertionError

foo.date_added = timezone.now()

self.assertEquals(only_foo_in_database.date_added, foo.date_added)

这导致

AssertionError: datetime.datetime(2013, 9, 2, 6, 48, 56, tzinfo=<UTC>) != datetime.datetime(2013, 9, 2, 6, 48, 56, 677255, tzinfo=<UTC>)

如何比较忽略微秒的两个日期时间值?

4

2 回答 2

26

将微秒设置为0using datetime.datetime.replace

>>> d = datetime.datetime.now()
>>> d
datetime.datetime(2013, 9, 2, 16, 25, 59, 444433)
>>> d.replace(microsecond=0)
datetime.datetime(2013, 9, 2, 16, 25, 59)

self.assertEquals(only_foo_in_database.date_added.replace(microsecond=0),
                  foo.date_added.replace(microsecond=0))

选择

使用datetime.timedelta

d1 = datetime.datetime(2013,9,2,6,48,56)
d2 = datetime.datetime(2013,9,2,6,48,56,677255)
self.assertTrue(abs(d1 - d2) < datetime.timedelta(seconds=1))
于 2013-09-02T07:25:49.730 回答
16

您可以在 unittest 中使用 assertAlmostEqual

from django.utils import timezone as tz
self.assertAlmostEqual(
    only_foo_in_database.date_added, foo.date_added,
    delta=tz.timedelta(seconds=1))
于 2019-05-22T06:47:35.710 回答