使用Joda时间比较两个日期

Mar*_*sen 33 java time date jodatime

我想比较两个日期,但是我遇到了麻烦.1日期是从java.util.date对象创建的,另一个是手动制作的.以下代码是一个示例:

Date ds = new Date();
DateTime d = new DateTime(ds);

DateTime e = new DateTime(2012,12,07, 0, 0);
System.out.println(d.isEqual(e));
Run Code Online (Sandbox Code Playgroud)

然而,测试结果证明了false.我猜这是因为时间.如何检查这两个日期是否相等(我的意思是年,月,日相同)?

JB *_*zet 50

System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight()));
Run Code Online (Sandbox Code Playgroud)

要么

System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay()));
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用toDateMidnight(),不应使用它.相反,可以使用withTimeAtStartOfDay(),但它仍然不是最佳的,因为它不会删除时区,因此如果两个日期具有不同的时区,它们将永远不会相等. (6认同)
  • 我使用`toLocalDate()`,我认为它有同样的问题.为了避免这种情况,我猜你可以链接`withZone()`,例如:`d.toLocalDate().isEqual(e.withZone(d.zone).toLocalDate())`.请注意,这是_not_测试. (4认同)
  • 如果d和e是不同的时区,则无效.查尔斯伍德上面的答案更可靠 (2认同)

Sta*_*tan 21

你应该使用toLocalDate():

date1.toLocalDate().isEqual(date2.toLocalDate())
Run Code Online (Sandbox Code Playgroud)

这将摆脱DateTime的Time部分.

还有另一种方法,但它没有考虑两个日期具有不同时区的情况,因此它不太可靠:

date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay())
Run Code Online (Sandbox Code Playgroud)


Vad*_*zim 6

return DateTimeComparator.getDateOnlyInstance().compare(first, second);
Run Code Online (Sandbox Code Playgroud)

通过如何比较没有时间部分的两个日期?