1
我有以下代碼:Java的時區與DST
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
String currentDate = dateFormat.format(date);
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
System.out.println(sdf.format(getSomeDate(currentDate,TimeZone.getTimeZone("Asia/Omsk"))));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Date getSomeDate(final String str, final TimeZone tz) throws ParseException {
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
sdf.setTimeZone(tz);
return sdf.parse(str);
}
現在的問題是,如果我用我想要的時區(這是「美國/芝加哥」),我得到了完全錯誤的時間。它的當前時間是+6而不是-6。
那麼我該如何解決這個問題,因爲現在我必須從GMT + 6開始計算時區,以獲得我的程序的正確時間&日期。
此外,Java是否自動合併DST設置?由於世界各地的人都在使用這個功能,所以有些DST時間不同,很難保持正確的時間。
爲什麼不按照這個答案? [java的如何對變化GMT-時間和本地時間](http://stackoverflow.com/questions/10750279/java-how-to-change-gmt-time-to-local-time) – Serdalis 2013-03-24 13:09:44
是的,Java處理DST。事實上,TimeZone類有幾種與DST相關的方法。 Calendar類也使用所有DST設置。 – VGR 2013-03-24 13:22:48
您並未在'sdf'上設置TZ,因此它將格式化日期,就像在本地TZ中一樣(JVM的默認TZ)。 – Blake 2013-03-24 15:11:25