2016-12-07 5 views
-1

parseBestメソッドの動作について少し混乱しています。 私はフォーマッタのパターンを持っているし、次のように私はparseBest方法で日付を解析しています:DateTimeFormatter parseBest()は「インデックス8で例外を解析できませんでした。」

DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd['T'HH:mm:ss[Z]]"); 
    parseMyDate(parser, "2016-12-07"); 
    parseMyDate(parser, "2016-12-07T15:31:12"); 
    parseMyDate(parser, "2016-12-07T15:31:12-0500"); 
    parseMyDate(parser, "2016-12-07Hello"); 

    public static void parseMyDate(DateTimeFormatter formatter, String parseText) { 
    try { 
     TemporalAccessor ta = formatter.parseBest(parseText, 
               OffsetDateTime::from, 
               LocalDateTime::from, 
               LocalDate::from); 
     if (ta instanceof OffsetDateTime) { 
     OffsetDateTime odt = OffsetDateTime.from(ta); 
     System.out.println("OffsetDateTime: " + odt); 
     } else if (ta instanceof LocalDateTime) { 
     LocalDateTime ldt = LocalDateTime.from(ta); 
     System.out.println("LocalDateTime: " + ldt); 
     } else if (ta instanceof LocalDate) { 
     LocalDate ld = LocalDate.from(ta); 
     System.out.println("LocalDate: " + ld); 
     } else { 
     System.out.println("Parsing returned: " + ta); 
     } 
    } catch (DateTimeParseException e) { 
     System.out.println("Here in Exception : "+e.getMessage()); 
     //e.printStackTrace(); 
    } 
    } 

しかし、次のようにメソッド呼び出しのためのすべてのために、私は同じ例外が発生しました:

java.timeを.format.DateTimeParseException:テキスト '2016-12-07Hello'をインデックス8で解析できませんでした。 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parseBest DateTimeFormatter.java:1897) at com.my.j8.DataTime.parseStr(DataTime.java:164)com.my.j8.DataTime.main(DataTime.java:158)

で私は次のようにパターンを変更しようとした: てDateTimeFormatterパーサ= DateTimeFormatter.ofPattern( "YYYY-MM-DD")。

まだ運がありません。なにか提案を?

+0

投票しても、このコードは質問を削除しない方が、良い/優れた構文解析をするのに役立つかもしれません。 – KayV

答えて

2

-ddより前のパターンにはスペースがありますので、パターンと一致する日付はありません。一致するパターンは正確です。

"yyyy-MM-dd['T'HH:mm:ss[Z]]"(スペースなし)のパターンは、最初の3パターンで機能します。

パターンがHelloと一致しないため、最後のパターンはまだ失敗します。パターンは入力文字列全体と一致する必要があります。

関連する問題