如何比较日期时间?

时间:2015-01-16 11:39:54

标签: java junit jodatime

我想比较两个DateTime Joda对象,以确定日期时间是否在同一天。

因此,我使用DateTimeComparator配置为仅进行年度比较(因此无时间比较)。

但是下面的测试成功了,即使它失败了。为什么呢?

@Test
public void validateDayNotEqual() {
    DateTimeComparator.getInstance(DateTimeFieldType.year(), DateTimeFieldType.dayOfWeek())
    DateTime lastTimestamp = DateTime.now().minusDays(1);
    assertTrue(comparator.compare(DateTime.now(), lastTimestamp) == 0);
}

1 个答案:

答案 0 :(得分:4)

DateTimeComparator的javadoc中:

public static DateTimeComparator getInstance(DateTimeFieldType lowerLimit,
                                             DateTimeFieldType upperLimit)
Returns a DateTimeComparator with a lower and upper limit. Fields of a magnitude less than the lower limit are excluded from comparisons. Fields of a magnitude greater than or equal to the upper limit are also excluded from comparisons. Either limit may be specified as null, which indicates an unbounded limit.

Parameters:
    lowerLimit - inclusive lower limit for fields to be compared, null means no limit
    upperLimit - exclusive upper limit for fields to be compared, null means no limit

Returns:
    a comparator over all fields between the limits

正如您所看到的,真正的问题是您交换了两个参数lowerLimitupperLimit。由于upperLimit是独占的但可以省略,因此应将其更改为:

    DateTimeComparator comparator = DateTimeComparator.getInstance(DateTimeFieldType.dayOfMonth());

...或者这也可以正常工作(也许更优雅):

    DateTimeComparator comparator = getDateOnlyInstance();

编辑2 :答案中包含严重错误,随后进行了更正。