20

datetime(6) をサポートしていない mysql 5.5 に date_added 日時値を挿入しています。これにより、次の単体テストを実行すると 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>)

マイクロ秒を無視して2つの日時値を比較するにはどうすればよいですか?

4

2 に答える 2

26

0次を使用してマイクロ秒を設定し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

単体テストで 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 に答える