2

我正在尝试从我的 SQL 数据库中收集某个时间,然后将其与当前日期进行比较以检查用户当前是否被禁止。

它正确显示了从数据库收集的日期,但时间每次都只是 00:00:00。

这是我正在使用的代码:

public static boolean checkBan(String playerName, String type) {
    Format formatter;
    Date date = new Date();
    formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    try {
        createConnection();
        Statement statement = con.createStatement();
        String query = "SELECT * FROM players WHERE username = '"
                + playerName + "'";
        ResultSet results = statement.executeQuery(query);
        while (results.next()) {
            java.sql.Date mysqlDate = results.getDate(type);
            if (mysqlDate == null || formatter.format(date) == null) {
                return false;
            } else {
                java.util.Date dateConverter = new java.util.Date(
                        mysqlDate.getTime());
                DateTime now = new DateTime(formatter.format(date));
                DateTime end = new DateTime(formatter.format(dateConverter));
                int mins = Minutes.minutesBetween(now, end).getMinutes();
                System.out.println("Start time: " + now);
                System.out.println("End time: " + end);
                System.out.println("Difference in minutes:" + mins);
                if (mins <= 0) {
                    return false;
                } else {
                    return true;
                }
            }
        }
        destroyCon();
    } catch (SQLException e) {
        destroyCon();
        e.printStackTrace();
    }
    return false;
}

它给我的输出是:

开始时间:2012-07-16T20:26:50.000Z

结束时间:2012-07-16T00:00:00.000Z

分钟差:-1226

但是SQL数据库中存储的结束时间是:2012-07-16 21:13:31

其他一些信息:我正在使用 Joda-time 和 sql 数据库,并且 java 服务器在同一台服务器上运行。如果您需要更多信息,请告诉我。

4

3 回答 3

4

java.sql.Date被定义为无时间日期。当您使用该类型时,无论数据库中有什么,它都会将时间信息从日期中剔除。如果您需要 Date 和 Time 信息,getTimestamp()则要在 ResultSet 上使用,而不是getDate().

于 2012-07-16T20:36:57.847 回答
2

正如 API 文档中所述, java.sql.Date没有时间组件(所有与时间相关的字段都设置为 0)。它与 SQL 日期匹配。

请改用java.sql.Timestamp

于 2012-07-16T20:39:17.090 回答
0

从未将 mysql 与 java 一起使用,
但如果java.sql.Date mysqlDate是 mysql DATE,则插入 a DATETIME
那么这可能是问题所在


oracle 文档中更新:java.sql.Date

“如果给定的......值包含时间信息,驱动程序会将时间组件......设置为零格林威治标准时间。”

于 2012-07-16T20:36:47.673 回答