Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将mySQL中的日期与java中的当前日期进行比较?_Java_Mysql_Jakarta Ee_Servlets - Fatal编程技术网

如何将mySQL中的日期与java中的当前日期进行比较?

如何将mySQL中的日期与java中的当前日期进行比较?,java,mysql,jakarta-ee,servlets,Java,Mysql,Jakarta Ee,Servlets,我正在使用MVC模式在JavaEE中编写一个简单的登录程序,我希望提醒用户他/她的密码已经超过一年了。目前,我可以从数据库中获取数据,并将其转换为字符串,但之后我不知道如何将其与当前日期进行比较 这就是我到目前为止所做的: public String validateAccount(String email, String enterPassword) { try { Class.forName(driverName).newInstance();

我正在使用MVC模式在JavaEE中编写一个简单的登录程序,我希望提醒用户他/她的密码已经超过一年了。目前,我可以从数据库中获取数据,并将其转换为字符串,但之后我不知道如何将其与当前日期进行比较

这就是我到目前为止所做的:

public String validateAccount(String email, String enterPassword) {

        try {
            Class.forName(driverName).newInstance();
        } catch (InstantiationException | IllegalAccessException
                | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Connection connection;

        try {

            connection = DriverManager.getConnection(dbURL, username, password);

            // Retrive current user data from database
            String getCredentials = "SELECT id,dateSet,strength FROM users WHERE email=? AND hashPassword=SHA2(CONCAT(?, salt), 256)";
            PreparedStatement verifyCredentials = connection
                    .prepareStatement(getCredentials);
            verifyCredentials.setString(1, email);
            verifyCredentials.setString(2, enterPassword);
            ResultSet foundData = verifyCredentials.executeQuery();

            while (foundData.next()) {
                System.out.println("Found account");
                int id = foundData.getInt("id");
                String dateSet = foundData.getString("dateSet");
                String strength = foundData.getString("strength");

                // ... do something with these variables ... if
                if (strength.equals("Weak")) {
                    return "1";

                } else if (/*Check if the date in the database is over a year old, and return 2*/) {
                    return "2";
                } else {
                    return "0";
                }

            }
            foundData.close();

            return "Account not found, re-enter your info again";

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "";

    }

您可以改为使用foundData.getTimestamp()并获取时间戳,您可以将其转换为普通java数据类:)

所以,你会有类似的

Date dateSet = new Date(foundData.getTimestamp("dateSet").getTime());
或者,如果您不熟悉使用日期实例(还需要使用日历),可以直接在SQL查询中进行检查

String getCredentials = "SELECT id,dateSet,strength, IF(dateSet < NOW() - INTERVAL 1 YEAR, TRUE, FALSE) AS oldPasswd FROM users WHERE email=? AND hashPassword=SHA2(CONCAT(?, salt), 256)";

您可以改为使用foundData.getTimestamp()并获取时间戳,您可以将其转换为普通java数据类:)

所以,你会有类似的

Date dateSet = new Date(foundData.getTimestamp("dateSet").getTime());
或者,如果您不熟悉使用日期实例(还需要使用日历),可以直接在SQL查询中进行检查

String getCredentials = "SELECT id,dateSet,strength, IF(dateSet < NOW() - INTERVAL 1 YEAR, TRUE, FALSE) AS oldPasswd FROM users WHERE email=? AND hashPassword=SHA2(CONCAT(?, salt), 256)";
试试这个

java.sql.Date date  = foundData.getDate("dateSet");
java.sql.Date date2 =  new Date(System.currentTimeMillis());
date2.compareTo(date);
我刚刚修改了您从结果集访问日期的方式。 请注意,如果参数日期等于此日期,“compareTo”将返回值0;如果此日期早于日期参数,则值小于0;如果此日期在日期参数之后,则该值大于0

以下方法将在几天内得到差异

public static long daysBetween(Date sd, Date ed) {
    Calendar startDate = Calendar.getInstance();
    startDate.setTime(sd);
    Calendar endDate = Calendar.getInstance();
    startDate.setTime(ed);
    Calendar date = (Calendar) startDate.clone();
    long daysBetween = 0;
    while (date.before(endDate)) {
        date.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween++;
    }
    return daysBetween;
}
试试这个

java.sql.Date date  = foundData.getDate("dateSet");
java.sql.Date date2 =  new Date(System.currentTimeMillis());
date2.compareTo(date);
我刚刚修改了您从结果集访问日期的方式。 请注意,如果参数日期等于此日期,“compareTo”将返回值0;如果此日期早于日期参数,则值小于0;如果此日期在日期参数之后,则该值大于0

以下方法将在几天内得到差异

public static long daysBetween(Date sd, Date ed) {
    Calendar startDate = Calendar.getInstance();
    startDate.setTime(sd);
    Calendar endDate = Calendar.getInstance();
    startDate.setTime(ed);
    Calendar date = (Calendar) startDate.clone();
    long daysBetween = 0;
    while (date.before(endDate)) {
        date.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween++;
    }
    return daysBetween;
}

我一般不熟悉.getTimestamp()方法或日期。getTimestamp将返回什么格式以及如何转换它?假设数据库中的列是日期类型,则getTimestamp将返回一个Timestamp实例,该实例将为您提供一个long,即自unixepoc以来的毫秒数。Date类有一个构造函数,它用很长的时间表示自unixepoc作为参数以来的毫秒数,所以这就是Date实例:)好东西,很乐意帮助:)我不熟悉.getTimestamp()方法或一般的日期。getTimestamp将返回什么格式以及如何转换它?假设数据库中的列是日期类型,则getTimestamp将返回一个Timestamp实例,该实例将为您提供一个long,即自unixepoc以来的毫秒数。Date类有一个构造函数,它用很长的时间表示从unixepoc作为参数以来的毫秒数,所以这就是Date实例:)好东西,很乐意帮助:)我理解,但是一旦我得到两个日期,我如何检查是否有365天(1年)的差异或者更多?用能给你提供daysThanks kunal差异的方法更新我的答案,我也会保留这个。我理解,但一旦我得到两个日期,我如何检查是否有365天(1年)或更多的差异?用能给你提供daysThanks kunal差异的方法更新我的答案,我也会保留这个。