Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按天比较日期时间?_Java_Junit_Jodatime - Fatal编程技术网

Java 如何按天比较日期时间?

Java 如何按天比较日期时间?,java,junit,jodatime,Java,Junit,Jodatime,我想比较两个DateTimeJoda对象,看看DateTime是否在同一天 因此,我使用的是一个DateTimeComparator,配置为只从一年到一天进行比较(因此没有时间比较) 但是下面的测试成功了,即使它应该失败。为什么? @Test public void validateDayNotEqual() { DateTimeComparator.getInstance(DateTimeFieldType.year(), DateTimeFieldType.dayOfWeek())

我想比较两个
DateTime
Joda对象,看看DateTime是否在同一天

因此,我使用的是一个
DateTimeComparator
,配置为只从一年到一天进行比较(因此没有时间比较)

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

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

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
如您所见,真正的问题是您交换了两个参数,
下限
上限
。由于
上限
是独占的,但可以省略,因此应将其更改为:

    DateTimeComparator comparator = DateTimeComparator.getInstance(DateTimeFieldType.dayOfMonth());
…或者这也可以很好地工作(也许更优雅):


编辑2:答案包含严重错误,随后被更正。

日期时间比较器的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
如您所见,真正的问题是您交换了两个参数,
下限
上限
。由于
上限
是独占的,但可以省略,因此应将其更改为:

    DateTimeComparator comparator = DateTimeComparator.getInstance(DateTimeFieldType.dayOfMonth());
…或者这也可以很好地工作(也许更优雅):


编辑2:答案包含严重错误,随后被更正。

太好了,您是否可以添加此评论?正如我所期望的那样。@membersound我已经发布了一个关于它不起作用的原因的答案。请考虑一下:“好的,你能把这个作为评论吗?”正如我所期望的那样。@membersound我已经发布了一个关于它不起作用的原因的答案。请考虑看:谢谢解释。这确实违反直觉,可能也会帮助其他人。@membersound如果有帮助,请检查“投票否决”按钮下的“v”按钮,将此答案标记为已接受:)谢谢您的解释。这确实违反直觉,可能也会帮助其他人。@membersound如果有帮助,请检查“投票否决”按钮下的“v”按钮,将此答案标记为已接受:)