如何比较两个不带时间部分的日期?
我想有一个compareTo方法,它忽略java.util.Date的时间部分。我想有很多方法可以解决这个问题。最简单的方法是什么?
回答:
虽然Joda Time当时是一个不错的建议,但请java.time尽可能使用Java 8+中的库。
我的首选是使用Joda Time,这使此操作变得异常简单:
DateTime first = ...;DateTime second = ...;
LocalDate firstDate = first.toLocalDate();
LocalDate secondDate = second.toLocalDate();
return firstDate.compareTo(secondDate);
编辑:如注释中所述,如果你使用DateTimeComparator.getDateOnlyInstance()它甚至更简单:)
// TODO: consider extracting the comparator to a field.return DateTimeComparator.getDateOnlyInstance().compare(first, second);
(“使用Joda时间”是几乎所有询问java.util.Date
或的SO问题的基础java.util.Calendar
。这是一个非常出色的API。如果你对日期/时间有重要意义,则应尽可能使用它。)
如果你绝对被迫使用内置API,则应Calendar使用适当的日期和适当的时区创建一个实例。然后,你可以将每个日历中的每个字段的小时,分钟,秒和毫秒设置为0,然后比较结果时间。与Joda解决方案相比绝对好用:)
时区部分是很重要的:java.util.Date
是始终基于UTC。在大多数情况下,我对日期感兴趣,那就是特定时区中的日期。Calendar
单独使用它会迫使你使用或使用Joda Time(除非你想自己考虑时区,我不建议这样做)。
Android开发人员快速参考
//Add joda library dependency to your build.gradle filedependencies {
...
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
以上是 如何比较两个不带时间部分的日期? 的全部内容, 来源链接: utcz.com/qa/422872.html