說一說java時區和數據庫時區的問題

看了兩個小時的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);


發佈了43 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章