比较存储在日期对象中的日期并返回一个布尔值

时间:2013-12-17 15:38:43

标签: java

我在比较我尝试过的Java中的日期时遇到了麻烦:

(today == actDate)

(today.equals(actDate))

两者似乎总是评价为假:

enter image description here

在上图中,第一个日期是今天,第二个日期是actDate。

两者都是日期对象:

Date today = new Date(System.currentTimeMillis());

Date actDate = new Date(taskHours.get(j).getDate().getTime());

然后我尝试使用compareTo,但是如果日期更大则会返回1,如果更低则返回-1。

我做错了什么?

6 个答案:

答案 0 :(得分:3)

java.util.Datejava.sql.Date不同。这可能是原因。

答案 1 :(得分:2)

您的问题是Date today = new Date(System.currentTimeMillis());。使用此方法,您可以使用当前系统时间(以毫秒为单位),这些时间存储在日期对象中。你的第二个日期不包含毫秒的信息,这就是每次比较都失败的原因。

答案 2 :(得分:2)

使用日期有点棘手。您需要使用compareTo,因为JDBC与java.sql.Timestamp一起使用,并且在应用程序中,您通常使用java.util.Date。如果两个对象是两个不同类的实例(即使它们可能来自同一层次结构),则通常认为这两个对象不相等。

您想要做的是:

public boolean isSameDate(Date date1, Date date2) {
    return date1.compareTo(date2) == 0;
}

如果您希望在null值发挥作用时让您的生活更轻松,请使用 commons-lang

public boolean isSameDate(Date date1, Date date2) {
    return ObjectUtils.compare(date1, date2) == 0;
}

如果您只想比较日期信息(而不是时间),那么我建议您使用 Joda Time 库(即LocalDate类)。将时间戳转换为日历日期对象并不是标准Java组件的简单(一行代码)任务。

答案 3 :(得分:1)

您可以使用Date#after(Date when)Date#before(Date otherDate)方法比较日期并获得一些订单。

答案 4 :(得分:1)

您正在比较2个不同的日期(可能是秒数不同),因此equals方法返回false,这是预期的。使用equals是主持他们的正确方法。

答案 5 :(得分:1)

改为使用Calendar对象。并分别手动比较日,月和年。

Calendar cal1 = new Calendar();
cal1.setTime(date1);
Calendar cal2 = new Calendar();
cal2.setTime(date2);

boolean equal = true;
equal &= cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH);
equal &= cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
equal &= cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);