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時間のない日付として定義されています。そのタイプを使用すると、データベースの内容に関係なく、日付から時刻情報が切り捨てられます。日付と時刻の両方の情報が必要な場合は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

java で mysql を使用したことはありませんが、 の代わりにmysqlである
場合、 それが問題になる可能性がありますjava.sql.Date mysqlDateDATEDATETIME


Oracle ドキュメントの更新: java.sql.Date

「指定された ... 値に時間情報が含まれている場合、ドライバーは時間コンポーネントを ... ゼロ GMT に設定します。」

于 2012-07-16T20:36:47.673 に答える