2016-03-31 18 views
1

私は日付文字列 "2015-01-12T13:00:00.000 + 02:00"を持っています。java 8 DateTimeFormatterはzとZが切り替わりますか?

z  time-zone name    zone-name   Pacific Standard Time; PST 
Z  zone-offset     offset-Z   +0000; -0800; -08:00; 

だから、私は02で与えられたゾーンの形式を持っているので、私は大文字のZを使用する必要があり、それを解析することが疑われるでしょう::00

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z") 
私は以下を参照してくださいのJavaDocを見てみると

しかし、それは私が解析エラーを取得します。 私は小文字zを使用している場合、それは誰もが何が起こっているか知ってい

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z") 

に動作しますか?

CODE:

DateTimeFormatter changetimeParser_Z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z"); 
    DateTimeFormatter changetimeParser_z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z"); 

    String time = "2015-01-12T13:00:00.000+02:00"; 

    ZonedDateTime time1 = ZonedDateTime.parse(time, changetimeParser_z); 
    System.out.println(time1); 
    ZonedDateTime time2 = ZonedDateTime.parse(time, changetimeParser_Z); 

    System.out.println(time2); 

のStackTrace

2015-01-12T13:00+02:00 
java.time.format.DateTimeParseException: Text '2015-01-12T13:00:00.000+02:00' could not be parsed at index 23 
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 
    at java.time.ZonedDateTime.parse(ZonedDateTime.java:597) 
+0

入力とは何ですか?コードは何ですか?完全なエラースタックトレースは何ですか? –

+0

コメントには投稿しないでください。あなたの質問を編集してください。 –

+0

'Z'の代わりに' X'を試してください – ACV

答えて

1

私はあなたがさらに読めばあなたが見つけるので、それはJavadocの中に誤りだと、この部分は間違い

Symbol Meaning      Presentation  Examples<br> 
------ -------      ------------  ------- 
Z  zone-offset     offset-Z   +0000; -0800; -08:00; 

であると考えていますオフセットの説明Z

オフセットZ:これは、パターン文字の数に基づいてオフセットをフォーマットします。 1つ、2つまたは3つの文字が時間と分を出力し、コロン( '+0130'など)は付きません。オフセットがゼロの場合、出力は '+0000'になります。 4文字は、Offset-Oの4文字に相当する完全な形式のローカライズされたオフセットを出力します。オフセットがゼロの場合、出力は対応するローカライズされたオフセットテキストになります。 5文字は時、分を出力し、オプションの秒は非ゼロの場合はコロンで出力します。オフセットがゼロの場合は 'Z'を出力します。 6つ以上の文字がIllegalArgumentExceptionをスローします。

RFC 822に準拠しています。

私の場合、パターンはSimpleDateFormatと同じになります。

+0

しかし、どうすればzのパターンがうまくいくのでしょうか?私は '+02:00'にゾーンを持っていますが、zのフォーマットパターンは実際にゾーン名fx ETC/PSTなどを想定しています – NinjaMester

+0

ああ、私は突然オフセットZeplanationを読むことで突然理解します。私は+00:00を持っているので5Zを入れなければなりません。したがって、DateTimeFormatterで動作します。changetimeParser_Z = DateTimeFormatter.ofPattern( "yyyy-MM-dd'T'HH:mm:ss.000ZZZZZ"); – NinjaMester

+0

'1つのzで働いた理由は、何とか寛大であり、それが何であるべきかを'推測 'するためでなければなりません – NinjaMester

関連する問題