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

标签 java datetime

我想要一个忽略 java.util.Date 的时间部分的 compareTo 方法。我想有很多方法可以解决这个问题。最简单的方法是什么?

最佳答案

更新:虽然 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);

("Use Joda Time"是几乎所有关于 java.util.Datejava.util.Calendar 的 SO 问题的基础。这是一个非常优秀的API。如果您正在做对日期/时间有意义的任何事情,那么您应该尽可能地使用它。)

如果您绝对被迫使用内置 API,则应创建具有适当日期和适当时区的 Calendar 实例。然后,您可以将小时、分钟、秒和毫秒中的每个日历中的每个字段设置为 0,并比较结果时间。与 Joda 解决方案相比,这绝对是 icky :)

时区部分很重要:java.util.Date 总是 基于 UTC。在我对日期感兴趣的大多数情况下,那是特定时区中的日期。这本身将迫使您使用 Calendar 或 Joda Time(除非您想自己考虑时区,我不建议这样做。)

Android 开发者快速引用

//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

关于java - 如何比较没有时间部分的两个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439779/

相关文章:

php - 在日期范围内查找日期不起作用 - PHP Date

python - 确定一个字符串可能是一个日期时间对象

java - 当我在四核机器上使用多线程时,为什么这段代码看不到任何显着的性能提升?

java - Exoplayer 线程错误 NoSuchElementExceptionat java.util.ArrayDeque.removeFirst

24 小时前的 Javascript 相对时间等作为时间

c# - 如何从 Linq to SQL 中的日期时间列获取月份名称?

matlab - MATLAB 中的多种日期格式

java - 如何在没有 sudo 的情况下在 ubuntu 上将 java 的版本从 8 更改为 11

java - JMS 与 akka 和多线程

java - 在 spring-boot 1.4.x 中添加原因短语