我正在编写一个方法来确定自上次查看以来是否修改了mysql表,以防止必须再次加载它。我已经能够获得最后修改时间并将其与我当前时间进行比较,但不幸的是,sql server比我提前3小时,它会导致问题。请参阅下面的代码。谢谢。
private Boolean needsToBeRefreshed(Connection conn, String ID) {
try {
Statement sta3 = conn.createStatement();
ResultSet rs =
sta3.executeQuery("show table status from " + database + " like '" + ID + "'");
rs.next();
Date lastmod = rs.getTimestamp("Update_time");
System.out.println("SQL " + lastmod);
sta3 = conn.createStatement();
Calendar calGMT = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date now = calGMT.getTime();
System.out.println("ID: " + ID);
System.out.println("Last refreshed: " + lastModifiedMap.get(ID) + " Last modified: " + lastmod);
if (lastModifiedMap.get(ID) == null || lastmod.after(lastModifiedMap.get(ID))) {
System.out.println(now);
lastModifiedMap.put(ID,now);
System.out.println("Accepted");
return true;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("SQL exception");
System.out.println("Accepted");
return true;
}
System.out.println("Rejected");
return false;
}
}
产生以下输出:
SQL 2015-03-02 02:57:57.0
ID: Testunits
Last refreshed: null Last modified: 2015-03-02 02:57:57.0
Mon Mar 02 00:11:55 PST 2015
Accepted
然后是第二次贯穿:
SQL 2015-03-02 02:57:57.0
ID: Testunits
Last refreshed: Mon Mar 02 00:11:55 PST 2015 Last modified: 2015-03-02 02:57:57.0
Mon Mar 02 00:12:43 PST 2015
Accepted
我一直在网上搜索并认识到Date类不依赖于时区...我觉得这是因为SQL服务器设置为不同的时区而java不知道它。所以我的问题可能就像如何获取sql server的时区并将其应用于日期一样简单。或者,如果SQL服务器具有上次修改的非时区特定时间戳...
任何帮助将不胜感激。谢谢!
编辑:
评论后我改变了我的代码,将我的“现在”时间创建为日历,并更改了输出以显示时间值。请参阅上面的编辑以进行新初始新产出如下:
SQL 2015-03-02 02:57:58.0
ID: Testunits
Last refreshed: 1425286285712 Last modified: 1425293878000
Mon Mar 02 00:51:30 PST 2015
Accepted
据我所知,我的“现在”时间必须是正确的,与时区无关,但是sql server返回的时间仍然是几个小时。
我该如何弥补这个?
编辑2:
想出来!答案确实最终帮助了我。谢谢。
private Boolean checkLastModified(Connection conn, String ID) {
try {
Statement sta3 = conn.createStatement();
ResultSet rs =
sta3.executeQuery("show table status from " + database + " like '" + ID + "'");
rs.next();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
Date lastmod = dateFormat.parse(rs.getString("Update_time"));
sta3 = conn.createStatement();
Calendar calGMT = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date now = calGMT.getTime();
if (lastModifiedMap.get(ID) == null || lastmod.after(lastModifiedMap.get(ID))) {
System.out.println(now);
lastModifiedMap.put(ID,now);
return true;
}
} catch (SQLException e) {
System.out.println("SQL exception");
return true;
} catch (ParseException e) {
System.out.println("Parse exception");
return true;
}
return false;
}
}