【问题标题】:Java gives 00:00:00 time when gathering dateTime from MySQL从 MySQL 收集 dateTime 时,Java 给出 00:00:00 时间
【发布时间】:2012-07-15 18:12:14
【问题描述】:

我正在尝试从我的 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 服务器在同一台服务器上运行。 如果您需要更多信息,请告诉我。

【问题讨论】:

  • 在 Stackoverflow,我们不会将问题重命名为 Solved,而是将答案标记为已接受

标签: java mysql sql time jodatime


【解决方案1】:

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

【讨论】:

  • 哦好吧没意识到。我将尝试改用 getTimeStamp。谢谢:)
  • 好的,当我改用时间戳时问题解决了。非常感谢。
【解决方案2】:

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

请改用java.sql.Timestamp

【讨论】:

    【解决方案3】:

    从未在java中使用过mysql,
    但如果java.sql.Date mysqlDate 是mysql DATE,则插入DATETIME
    那么这可能是问题

    更新
    oracle doc: java.sql.Date

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

    【讨论】:

    • 我目前在 SQL 数据库中使用 DATETIME。
    • 如果你在mysql中使用DATETIME,然后在Java中将它转换为DATE,你会丢失时间信息
    • 是的,我刚刚意识到这一点。现在我正在努力将其转换为 TimeStamp 而不是日期,但我确信在尝试失败后我会掌握它的窍门:P
    猜你喜欢
    • 2011-06-27
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多