最近我一直在使用時區轉換,並且我對結果感到非常驚訝。基本上,我想將日期從一個時區轉換爲另一個時區。下面是代碼,轉換工作正常,但我在調試時觀察到的是,日期不轉換,除非我撥打Calendar#get(Calendar.FIELD)
。帶日曆的TimeZone令人困惑的結果
private static void convertTimeZone(String date, String time, TimeZone fromTimezone, TimeZone toTimeZone){
Calendar cal = Calendar.getInstance(fromTimezone);
String[] dateSplit = null;
String[] timeSplit = null;
if(time !=null){
timeSplit = time.split(":");
}
if(date!=null){
dateSplit = date.split("/");
}
if(dateSplit !=null){
cal.set(Calendar.DATE, Integer.parseInt(dateSplit[0]));
cal.set(Calendar.MONTH, Integer.parseInt(dateSplit[1])-1);
cal.set(Calendar.YEAR, Integer.parseInt(dateSplit[2]));
}
if(timeSplit !=null){
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeSplit[0]));
cal.set(Calendar.MINUTE, Integer.parseInt(timeSplit[1]));
}
// System.out.println("Time in " + fromTimezone.getDisplayName() + " : " + cal.get(Calendar.DATE) +"/"+ (cal.get(Calendar.MONTH)+1)+"/"+ cal.get(Calendar.YEAR) +" " + ((cal.get(Calendar.HOUR_OF_DAY)<10) ? ("0"+cal.get(Calendar.HOUR_OF_DAY)): (cal.get(Calendar.HOUR_OF_DAY)))
// +":" + (cal.get(Calendar.MINUTE)<10 ? "0"+cal.get(Calendar.MINUTE) : cal.get(Calendar.MINUTE)));
cal.setTimeZone(toTimeZone);
System.out.println("Time in " + toTimeZone.getDisplayName() + " : " + cal.get(Calendar.DATE) +"/"+ (cal.get(Calendar.MONTH)+1)+"/"+ cal.get(Calendar.YEAR) +" " + ((cal.get(Calendar.HOUR_OF_DAY)<10) ? ("0"+cal.get(Calendar.HOUR_OF_DAY)): (cal.get(Calendar.HOUR_OF_DAY)))
+":" + (cal.get(Calendar.MINUTE)<10 ? "0"+cal.get(Calendar.MINUTE) : cal.get(Calendar.MINUTE)));
}
public static void main(String[] args) throws ParseException {
convertTimeZone("23/04/2013", "23:00", TimeZone.getTimeZone("EST5EDT"), TimeZone.getTimeZone("GB"));
}
預期輸出:Time in Greenwich Mean Time : 24/4/2013 04:00
輸出我得到了我係統輸出1評論:Time in Greenwich Mean Time : 23/4/2013 23:00
如果我未評論sysout1我得到預期的有效輸出。
任何幫助表示讚賞
'cal.setTimeZone()'在第一個'SOUT'之後被調用,也許它與此有關? – 2013-04-23 15:36:14
@MrD日期首先處於時區EST5EDT中,即在第一次系統輸出之前。我必須將此日期轉換爲GMT。因此我在第一個sysout之後設置了時區(GB)。 – PermGenError 2013-04-23 15:38:04
@MrD正如我在這個問題中所說的,轉換工作fie當我un-comment第一Sysout。:) – PermGenError 2013-04-23 15:39:39