【问题标题】:Java - Check whether two Dates are EqualJava - 检查两个日期是否相等
【发布时间】:2014-06-28 05:27:15
【问题描述】:

我正在尝试比较两种不同格式的日期:

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

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

我的假设正确吗?

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

感谢您的帮助。

【问题讨论】:

    标签: java sql date


    【解决方案1】:

    听起来您是在比较 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"
    }
    

    【讨论】:

      【解决方案2】:

      java.sql.Date 时间为零

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

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

      本地日期

      使用 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 的默认时区解释。

      【讨论】:

        【解决方案3】:

        我的假设正确吗?

        是的,你的假设是正确的。如果两个 Date 实例的 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);
        

        【讨论】:

          【解决方案4】:

          假设两个日期都在同一个时区,并且假设这里的日期相等标准是一年中的哪一天,我相信您可以将日期作为字符串进行比较。

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              如果需要检查两个日期是否相等,最好的方法是使用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

              【讨论】:

              • 除了Date 早已过时(没有双关语),我看不出它回答了这个问题。同时它似乎比使用equals 方法复杂一点。
              猜你喜欢
              • 2021-12-22
              • 1970-01-01
              • 2018-02-01
              • 2015-08-21
              • 1970-01-01
              • 2020-05-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多