我在比较我尝试过的Java中的日期时遇到了麻烦:
(today == actDate)
(today.equals(actDate))
两者似乎总是评价为假:
在上图中,第一个日期是今天,第二个日期是actDate。
两者都是日期对象:
Date today = new Date(System.currentTimeMillis());
Date actDate = new Date(taskHours.get(j).getDate().getTime());
然后我尝试使用compareTo,但是如果日期更大则会返回1,如果更低则返回-1。
我做错了什么?
答案 0 :(得分:3)
java.util.Date
和java.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);