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