Java - 检查两个日期是否相等

时间:2014-05-10 14:18:01

标签: java sql date

我试图以两种不同的格式比较日期:

Tue Jul 01 00:12:14 EST 2014

使用以下函数创建:

private Date getDate (int day, int month, int year){
    Calendar calendar = Calendar.getInstance();
    calendar.setLenient(false);
    calendar.set(year, month-1, day);
    Date date = calendar.getTime();
    return date;
}

2014-07-01

在比较这两个日期后,我希望输出显示它们是相同的。但是我相信,由于第1个日期timestamp,它们并没有被确定为平等。

我的假设是否正确?

如果是这样,有没有办法可以将第一个日期转换为第二个日期?正在从SQL数据库中检索第二个日期,其中变量为DATE

感谢您的帮助。

6 个答案:

答案 0 :(得分:4)

听起来你正在比较java.util.Date(即时)和java.sql.Date(时间是午夜时刻)。

算术舍入必须处理本地时区,使其比您最初想象的更复杂。

比较两者的最简单方法是使用数据格式化器并比较输出:

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
if (f.format(date1).equals(f.format(date2))) {
    // the two dates are on the same "day"
}

答案 1 :(得分:1)

java.sql.Date具有零时间

该文档解释了java.sql.Date的时间部分设置为零(UTC),即午夜。

因此,当与具有非零时间的java.util.Date进行比较时,两者将不相等。

LOCALDATE

在Java 8中使用新的java.time包的Joda-Time变得更加容易。两者都提供了忽略时间的LocalDate类。

LocalDate x = new LocalDate( 2014, 5, 6 );
LocalDate y = new LocalDate( 2014, 5, 6 );
boolean same = x.equals( y );

要将java.sql.Date转换为Joda-Time LocalDate,请将其传递给New LocalDate的构造函数。您可能还需要传递DateTimeZone.UTC以确保它不会被JVM的默认时区解释。

答案 2 :(得分:0)

  

我的假设是否正确?

是的,你的假设是正确的。如果两个日期实例的getTime()结果相同,则两个日期实例是正确的

来自 Date.java

public boolean equals(Object obj) {
    return obj instanceof Date && getTime() == ((Date) obj).getTime();
}

转换只是假设您需要将小时,分钟和秒设置为0:

calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);

答案 3 :(得分:0)

假设两个日期都在同一时区,并假设此处的日期相等标准是一年中的某一天,我相信您只需将日期作为字符串进行比较。

为此,您可以使用SimpleDateFormat确保两者的格式相同。

答案 4 :(得分:0)

我建议您将它们转换为一种特定格式,并使用比较器进行比较。

答案 5 :(得分:0)

如果需要检查两个日期是否相等,最好的方法是使用compareTo方法。

if(yesterday.compareTo(today) == 0) { 
    System.out.println("Given dates are same"); 
} else { 
    System.out.println("Given dates are different "); 
}

阅读更多:https://www.java67.com/2016/09/how-to-compare-two-dates-in-java.html#ixzz6uH5r1xE2