首页 > 解决方案 > Java compareTo 日期不能相等

问题描述

我正在尝试比较 2 个日期,第一个日期来自 MySQL 数据库,第二个日期来自当前日期。

如下所示,数据库中有不同的日期

数据库中的日期记录 但问题是我得到了 3 个 if 语句,它们应该告诉我的程序数据库日期是在当前日期之前、之后还是等于当前日期。Before 和 After 语句应该可以工作,但它可以看到日期 2018-06-12 应该等于当前日期,因此它以“before 语句”结尾。

希望你能看到我做错了什么。

private static void Resetter() throws ParseException, SQLException {
    String host = "****";
    String username = "root";
    String mysqlpassword = "";

    //Querys
    String query = "select * from accounts";
    String queryy = "update accounts set daily_search_count = 0 where id = ?";
    Connection con = DriverManager.getConnection(host, username, mysqlpassword);
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(query);

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ));
    Date currentDate = new Date();

    while(rs.next()){
        System.out.println(dateFormat.format(currentDate));
        if (rs.getDate(5).compareTo(currentDate) > 0) {
           // System.out.println("Database-date is after currentDate");
        } else if (rs.getDate(5).compareTo(currentDate) < 0) {
           // System.out.println("Database-date is before currentDate");
            PreparedStatement updatexdd = con.prepareStatement(queryy);
            updatexdd.setInt(1, rs.getInt(1));
            int updatexdd_done = updatexdd.executeUpdate();
        } else if (rs.getDate(5).compareTo(currentDate) == 0) {
           // System.out.println("Database-date is equal to currentDate");
        } else {
            System.out.println("Any other");
        }
    }
}

标签: javavalidationdatecompareto

解决方案


ResultSet#getDate返回删除了时间部分的日期。实例化一个新Date对象确实包含时间,因此您必须自己删除它。例如:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date currentDate = cal.getTime();

推荐阅读