2012-03-01 27 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

答えて

0

フォーマット文字列にタイムゾーンがありません。引数をチェックすると-05:00で終了し、Lenient == falseも使用しています。

+0

お返事ありがとうございますが、どうすれば正確に渡されるのか分かりますか? – Pawan

+0

私はあなたの質問を理解していない...入力は他の人によって定義されていると思います。フォーマットが期待するものは、コンストラクタの最初のパラメータです。 http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String、java.util.Locale) – Luis

0

残念ながら、SimpleDateFormatに利用できるタイムゾーン形式は、ISO8601に準拠していません。 SimpleDateFormatは、 "GMT + 01:00"や "+0100"のようなタイムゾーン文字列を認識します。後者はRFC822に従います。したがって、SimpleDateFormatを使用することはあなたのケースでオプションとして見えません(UTC-05:00をタイムゾーンとして使用するため)。

SimpleDateFormatの代わりに、そのタイプの日付書式にJodaTimeを使用する必要があります。

+0

回答ありがとうございます。 (不明なソース)java.text.SimpleDateFormat.initializeで \t(不明なソース)java.text.SimpleDateFormat.compileでいるjava.textで \tを不正なパターン文字 'Y' \t:私は、java.lang.IllegalArgumentExceptionがを取得しています。 SimpleDateFormat。 (不明な情報源) – Pawan

+0

私は自分の答えを編集しました。私は真剣にJodaTime APIを見てお勧めします。詳細については、このディスカッションをチェックしてください:http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date –

+0

ありがとうございます。しかし、サードパーティ製のAPIを使用することはできませんでした。もう一度 。 – Pawan