我想要一个忽略 java.util.Date 的时间部分的 compareTo 方法。我想有很多方法可以解决这个问题。最简单的方法是什么?
更新:虽然当时 Joda Time是一个很好的推荐,但java.time尽可能使用 Java 8+ 中的库。
java.time
我的偏好是使用Joda Time,这使得这非常容易:
DateTime first = ...; DateTime second = ...; LocalDate firstDate = first.toLocalDate(); LocalDate secondDate = second.toLocalDate(); return firstDate.compareTo(secondDate);
编辑:如评论中所述,如果您使用DateTimeComparator.getDateOnlyInstance()它会更简单:)
DateTimeComparator.getDateOnlyInstance()
// TODO: consider extracting the comparator to a field. return DateTimeComparator.getDateOnlyInstance().compare(first, second);
java.util.Date(“使用 Joda Time”是几乎所有关于or的SO 问题的基础java.util.Calendar。它是一个非常出色的 API。如果您对日期/时间做 任何 重要的事情,如果可能的话,您应该真正使用它。)
java.util.Date
java.util.Calendar
如果您绝对 被迫 使用内置 API,您应该创建一个Calendar具有适当日期并使用适当时区的实例。然后,您可以将小时、分钟、秒和毫秒中的每个日历中的每个字段设置为 0,并比较结果时间。与 Joda 解决方案相比,这绝对是 icky :)
Calendar
时区部分很重要: 始终java.util.Date基于UTC。在我对日期感兴趣的大多数情况下,那是 特定时区 的日期。这本身会迫使您使用或 Joda Time(除非您想自己考虑时区,我不建议这样做。) Calendar
安卓开发者快速参考
//Add joda library dependency to your build.gradle file dependencies { ... implementation 'joda-time:joda-time:2.9.9' }
示例代码(示例)
DateTimeComparator dateTimeComparator = DateTimeComparator.getDateOnlyInstance(); Date myDateOne = ...; Date myDateTwo = ...; int retVal = dateTimeComparator.compare(myDateOne, myDateTwo); if(retVal == 0) //both dates are equal else if(retVal < 0) //myDateOne is before myDateTwo else if(retVal > 0) //myDateOne is after myDateTwo