当从MySQL收集dateTime时,Java给出了00:00:00的时间

时间:2012-07-16 20:32:25

标签: java mysql sql time jodatime

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

它正确显示从db收集的日期,但每次的时间仅为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服务器在同一台服务器上运行。 如果您需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

改为使用java.sql.Timestamp

答案 2 :(得分:0)

从未在java中使用过mysql,
但如果java.sql.Date mysqlDate是一个mys DATE,则DATETIME,<。} 那可能是问题

<强>更新
oracle doc: java.sql.Date

“如果给定的...值包含时间信息,则驱动程序会将时间分量...设置为零GMT。”