有一些库可以帮助解决这个问题:
Apache commons-lang
如果您的类路径上有Apache commons-lang,则可以使用DateUtils.truncate
将日期截断到某个字段。
assertEquals(DateUtils.truncate(date1,Calendar.SECOND),
DateUtils.truncate(date2,Calendar.SECOND));
有一个简写:
assertTrue(DateUtils.truncatedEquals(date1,date2,Calendar.SECOND));
请注意,12:00:00.001 和 11:59:00.999 将被截断为不同的值,因此这可能并不理想。为此,有一轮:
assertEquals(DateUtils.round(date1,Calendar.SECOND),
DateUtils.round(date2,Calendar.SECOND));
AssertJ
从版本 3.7.0 开始,如果您使用的是 Java 8 日期/时间 API,则 AssertJ 添加了 isCloseTo
断言。
LocalTime _07_10 = LocalTime.of(7, 10);
LocalTime _07_42 = LocalTime.of(7, 42);
assertThat(_07_10).isCloseTo(_07_42, within(1, ChronoUnit.HOURS));
assertThat(_07_10).isCloseTo(_07_42, within(32, ChronoUnit.MINUTES));
它也适用于传统的java Dates:
Date d1 = new Date();
Date d2 = new Date();
assertThat(d1).isCloseTo(d2, within(100, ChronoUnit.MILLIS).getValue());