如何比较两个没有时间部分的日期?
我希望有一个比较To方法,它忽略了java.util.Date的时间部分。我想有很多方法可以解决这个问题。最简单的方法是什么?
我希望有一个比较To方法,它忽略了java.util.Date的时间部分。我想有很多方法可以解决这个问题。最简单的方法是什么?
更新:虽然Joda 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(),
它甚至更简单:)
// TODO: consider extracting the comparator to a field.
return DateTimeComparator.getDateOnlyInstance().compare(first, second);
(“使用Joda时间”是几乎所有询问或的SO问题的基础。这是一个完全优越的API。如果你正在做任何重要的日期/时间,你应该真正使用它,如果可能的话。java.util.Date
java.util.Calendar
如果您绝对被迫使用内置 API,则应创建一个具有适当日期并使用适当时区的 实例。然后,您可以将每个日历中的每个字段从小时、分钟、秒和毫秒设置为 0,并比较结果时间。与Joda解决方案相比,绝对很恶心,虽然:)Calendar
时区部分很重要:始终基于 UTC。在大多数情况下,我对某个日期感兴趣,那就是特定时区的日期。这本身会迫使你使用或Joda Time(除非你想自己考虑时区,我不建议这样做。java.util.Date
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
Apache commons-lang几乎无处不在。那么这个呢?
if (DateUtils.isSameDay(date1, date2)) {
// it's same
} else if (date1.before(date2)) {
// it's before
} else {
// it's after
}