我的代碼在印度的本地服務器上運行時正確計算日期和時間,包括dayLightSaving時間。但是,當我從美國服務器運行相同的代碼時,我得到的是timeZoneId不在DST之前一小時的時間。從的LocalServer基於時區的計算時間
TimeZone tz = TimeZone.getTimeZone("America/Phoenix");
Date currTime = getDateByTZ(new Date(), tz);
System.out.println("currTime" + currTime);
public static Date getDateByTZ(Date d, TimeZone tz) throws Exception {
if (tz == null) {
tz = TimeZone.getDefault();
}
Integer tzOffSet = tz.getRawOffset();
Integer tzDST = tz.getDSTSavings();
Integer defOffSet = TimeZone.getDefault().getRawOffset();
Integer defDST = TimeZone.getDefault().getDSTSavings();
Calendar cal = Calendar.getInstance(tz);
cal.setTime(d);
if (tz.inDaylightTime(d)) {
cal.add(Calendar.MILLISECOND, -defOffSet);
cal.add(Calendar.MILLISECOND, -defDST);
cal.add(Calendar.MILLISECOND, +tzOffSet);
cal.add(Calendar.MILLISECOND, +tzDST);
} else {
cal.add(Calendar.MILLISECOND, -defOffSet);
cal.add(Calendar.MILLISECOND, tzOffSet);
}
return cal.getTime();
}
結果:
currTime:星期一年10月22 1點52分21秒IST 2012
結果從USserver:
currTime:星期一年10月22 02:52:21 IST 2012
檢查美國和本地機器的系統時鐘,並在調整課程時間差後查看它們是否匹配。你的代碼看起來很好。 – specialscope