2017-05-02 20 views
2

は私が提案し、他のSOの答えとしてロケールを追加することについて読んjava.text.ParseException: Unparseable date: "2016-11-18T11:13:43.838Z" (at offset 23)解決方法java.text.ParseException:解析できない日付ですか?

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US); 
try { 
    Date date1 = df.parse("2016-11-18T11:13:43.838Z"); 

    DateFormat outputFormatter1 = new SimpleDateFormat("dd-MMM-yyyy"); 
    String output1 = outputFormatter1.format(date1); // 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

を得続ける、しかし読みやすい形式にこれを変換しようとしているが、それはまだ動作していません。

+0

あなたの 'SimpleDateFormat'にZを一重引用符で入れてください。このように: 'DateFormat df = new SimpleDateFormat(" yyyy-MM-dd'T'HH:mm:ss.SSS'Z '");' –

+0

あなたはタイムゾーンがありません.... –

+1

@ΦXocę웃いepepeúpaツタイムゾーンを持っています。 'Z 'は' + 0000'に相当するゼロタイムゾーンです。 –

答えて

2

、あなたは...のようなものTimeZoneを欠けている:あなたはXていることを設定-0600

例:

Date date1 = df.parse("2016-11-18T11:13:43.838-0600Z"); 
をここ

詳細はdocです....

あなたのコードは次のようになります。

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    try { 
     Date date1 = df.parse("2016-11-18T11:13:43.838-0600Z"); 
     DateFormat outputFormatter1 = new SimpleDateFormat("dd-MMM-yyyy"); 
     String output1 = outputFormatter1.format(date1); // 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
+0

これは、働いた。解決策は、バックエンドが日付を保存する方法を変更して、SimpleDateFormatで許容可能なパターンでフォーマットできるようにすることでした。誰かがapi呼び出しによって返された日付の値を変更せずに解決策を提供できない限り、これは最良の答えだと思います。 – Woppi

+0

@Woppi -0600はZ(= + 0000)と同じではありません。だから、もしあなたが文字列前処理を介してそのような入力を変更すると、別の結果が得られます。あなたのJVMが古すぎる場合(Java-7がXパターンをサポートしない場合)、 "Z"を "+0000"(あるいは "+00:00")で置き換えるべきです。 –

3

docsによると、フォーマット文字列のZは、RFC 822タイムゾーンを示しています。 +01:00。 ISO 8601タイムゾーン(UTCタイムゾーンを示す入力文字列のZ)を解析する必要があります。あなたはそのパターンの正しい表現ではない文字列を解析している

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX", Locale.US); 
+0

こんにちは、Xを試みましたが、 "java.lang.IllegalArgumentException:java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:314)で不明なパターン文字 'X'が返されました。私はAndroidアプリでこれを使用しています。私たちのmongodbに保存されたパターンは、Androidでサポートされていません。https://developer.android.com/reference/java/text/SimpleDateFormat.html – Woppi

2

SimpleDateFormatのJavadocを読んで、私は、タイムゾーンのためZを使用することは非常に厳格であることがわかりました。 zuluとして"Z"を認識せず、数値のタイムゾーンオフセットのみを受け入れます。 代わりにXを試してみてください。これは、ドキュメントに従って"Z"を受け付けます。

関連する問題