2012-05-29 35 views
2

我做這樣的事情在我的計劃:DataTypeConvertor parseDateTime結果

Calendar cal = DatatypeConverter.parseDateTime("2012-05-29T11:17:04.805-07:00"); 
System.out.println(cal.getTime().toString()); 

O/P:

週二5月29日13時17分04秒CDT 2012

爲什麼是結果顯示時間13:17:04,在我輸入的時間是11:17:04,時區-07:00是太平洋時區。它不應該打印出來11:17:04?

回答

2

您的時區 - 程序運行時的默認區別與給DatatypeConverter.parseDateTime()方法指定的時區不同,並且cal.getTime()。toString()方法使用默認時區格式化日期。

千萬不要使用Date.toString()來格式化日期 - 日期只知道從紀元時間開始的毫秒數。相反使用java.text.SimpleDateFormat這樣的:

SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(dateObject). 

import java.util.Calendar; 
import java.util.TimeZone; 
import java.text.SimpleDateFormat; 
import javax.xml.bind.DatatypeConverter; 

class TestDate 
{ 
    public static void main(String[] args) 
    { 
     Calendar cal = DatatypeConverter.parseDateTime("2012-05-29T11:17:04.805-07:00"); 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); 
     df.setTimeZone(TimeZone.getTimeZone("GMT-07:00")); 
     String date = df.format(cal.getTime()); 
     System.out.println(date); 
    } 
} 
+0

然後小心。 SimpleDateFormat不是線程安全的。如果你創建一個實例,使用它,然後扔掉它,你很好。否則,您可能需要將其放在ThreadLocal中,或將其全部用於同步塊中。 –