看了兩個小時的API
java關於時間、日期的類真是混亂,真是煩
Calendar類設了時區還是沒用,返回的還是當前系統時間。
後來一怒把那些類所有方法仔細研究一遍,找到一個比較好的方法。
貢獻出來:
TimeZone類,
getTimeZone("GMT+08:00")獲得北京時區
getDefault()獲得默認時區
getRawOffset()方法,獲得相對於GMT的偏移。
然後相減。
最後用Calendar 類獲取1970年的毫秒數。再加上偏移。
就是正確的北京時間。
(因爲有時候服務器在外國,直接getTime()獲取的不是北京時間)
代碼:
public final class Token {
private Token(){}
public static long getToken() {
TimeZone bjTzone = TimeZone.getTimeZone("GMT+08:00");
TimeZone dfTzone = TimeZone.getDefault();
long off = bjTzone.getRawOffset() - dfTzone.getRawOffset();
Calendar cr = Calendar.getInstance();
return cr.getTimeInMillis() + off;
}
//測試方法
public static void main(String[] args){
Timestamp now;
now = new Timestamp(getToken());
System.out.println(now);
}
}
然後存數據庫的時候,
String sql = "xxxxx ?";
PreparedStatement stmt = conn.prepareStatement(sql);
Timestamp now = new Timestamp(Token.getToken());
stmt.setTimestamp(1, now);