2013-01-02 58 views
2

我有麻煩時間字符串轉換成一個準確的日期對象表示如何將正確TIMESTRING轉換爲日期對象

是我與通信將提供UTC時間值,如該服務器。

2013-01-02T05:32:02.8358602Z 

當我嘗試下面的代碼時,我最終得到的毫秒數比預期的UTC要快2hr15min。

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault()); 
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));     
Date date = inputFormat.parse("2013-01-02T05:32:02.8358602Z"); 

我在做什麼錯

+0

的可能重複[我怎樣才能解析UTC日期/時間(字符串)到更多的東西可讀?( http://stackoverflow.com/questions/6543174/how-can-i-parse-utc-date-time-string-into-something-more-readable) – blank

+0

感謝您的建議鏈接,但我不相信它是一個副本。我並不想提高可讀性,而是將字符串準確地轉換爲日期。 – Redshirt

回答

-1

試試這個:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
Date d = format.parse(fileDate); 

必須指定的SimpleDateFormat()構造正確的格式。

編輯:

public String getconvertdate1(String date) 
{ 
    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
    inputFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    DateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy"); 
    Date parsed = null; // should not be initialized first else current date will be printed in case of a parse exception 
    try 
    { 
     parsed = inputFormat.parse(date); 
    } 
    catch (ParseException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    String outputText = outputFormat.format(parsed); 
    return outputText; 
} 

而且還試圖用我上面的方法如下格式:EEE MMM dd HH:mm:ss zzz yyyy

+0

不幸的是,拋出一個解析異常 – Redshirt

+0

這看起來不對 – Jayamohan

+0

我曾與那,Jayamohan .... @ Redshirt,我已經發布了另一個答案見,編輯。 –

0

的問題是,SimpleDateFormat的花費8358602是不是一秒它是那麼號碼,如果米利斯= 8358602女士。默認情況下,SimpleDateFormat處於「寬鬆」模式,這就是爲什麼它接受8358602,它也將接受99天的字段,並將額外的日子移動到月份字段等等。如果您將嚴格模式切換爲SimpleDateFormat.setLenient(true),您將得到ParseException,因爲millis的最大值爲999.

我可以提供解決方法。您的日期採用W3C XML Schema 1.0日期/時間格式,分數秒。對於這種情況,你需要javax.xml.datatype.XMLGregorianCalendar。這工作

DatatypeFactory dtf = DatatypeFactory.newInstance(); 
XMLGregorianCalendar c = dtf.newXMLGregorianCalendar("2013-01-02T05:32:02.8358602Z"); 
System.out.println(c.toGregorianCalendar().getTime()); 

,並打印

Wed Jan 02 07:32:02 EET 2013 

注意的是EET是GMT + 2

+0

謝謝你的解釋。 – Redshirt

相關問題