2011-11-16 221 views
8

有誰請告訴我爲什麼我在下面的代碼得到java.text.ParseException: Unparseable datejava.text.ParseException:無法解析日期:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 


public class Testdate { 
    public static void main(String args[]) 
    { 
     String text = "2011-11-19T00:00:00.000-05:00"; 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
     try { 
      Date parsed = sdf.parse(text.trim()); 
      System.out.println(parsed); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

回答

9

其因您所在時區的結腸。刪除它,它將工作:

String text = "2011-11-19T00:00:00.000-0500"; 
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
+0

您使用了不同的字符串,但實際的字符串是「2011-11-19T00:00:00.000-05:00」; ,我想冒號 – Pawan

+0

只是解釋它失敗的原因,以及如何解決它的一種方法。 – Chris

+0

我會調查爲什麼你會得到一個日期,這是不符合RFC的..你可以通過刪除最後一個冒號解決它,但這顯然是一個糟糕的工作。 – Chris

5

由於SimpleDateFormat的方式支持不處理與偏移量Z部分冒號英寸

我建議您使用Joda Time來代替,使用ISODateFormat.dateTime()來獲得適當的格式化程序。

(見本similar-but-not-quite-the-same-question從今天早些時候,以獲取更多信息。)

相關問題