2012-03-01 112 views
0

我正在以這種格式2012-01-13T00:00:00.000-05:00接收輸入,並且需要將其轉換爲yyyyMMdd格式。 我也設置了SimpleDateFormat.setLenient(false);java:java.text.ParseException:Unparseable date

這是我解析日期

public static String getparsedDate(String date) throws Exception { 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); 
     sdf.setLenient(false); 

     String s1 = date; 
     String s2 = null; 
     Date d; 
     try { 
      d = sdf.parse(s1); 
      s2 = (new SimpleDateFormat("yyyyMMdd")).format(d); 

     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     return s2; 

    } 

但我在

java.text.ParseException得到一個異常編碼:無法解析的日期: 「201201」

at java.text.DateFormat.parse(Unknown Source) 

有沒有人請讓我知道,可能是什麼問題?

+1

錯誤提示您沒有以您認爲的格式獲取數據。 – skaffman 2012-03-01 11:26:58

回答

0

您在格式字符串中缺少時區。如果您檢查參數,它將以-05:00結束,並且您還正在使用Lenient == false。

+0

感謝您的迴應,但您怎麼知道準確通過什麼? – Pawan 2012-03-01 11:32:19

+0

我不明白你的問題......我猜輸入是由其他人定義的,所以他們應該告訴你。格式所期望的是構造函數的第一個參數。請參閱http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String,java.util.Locale) – Luis 2012-03-01 11:42:53

0

不幸的是,可用於SimpleDateFormat的時區格式不符合ISO8601標準。 SimpleDateFormat理解時區字符串,如「GMT + 01:00」或「+0100」,後者根據RFC822。因此,在您的情況下使用SimpleDateFormat似乎不是一個選項(因爲您使用UTC-05:00作爲時區)。

代替SimpleDateFormat,您需要使用JodaTime作爲該類型的日期格式。

+0

感謝您的答案,但我得到java.lang.IllegalArgumentException異常:非法字符模式 'Y' \t在java.text.SimpleDateFormat.compile(來源不明) \t在java.text.SimpleDateFormat.initialize(來源不明) \t在java.text中。 SimpleDateFormat的。 (未知來源) – Pawan 2012-03-01 12:05:19

+0

我編輯了我的答案。我強烈建議你看看JodaTime API。查看這個討論以獲取更多信息:http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date – 2012-03-01 12:10:18

+0

謝謝,但我們並不贊同使用第三方API,無論如何謝謝再來一次 。 – Pawan 2012-03-01 12:22:15