2016-12-07 66 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:Text'2016-12-07Hello'無法在索引8 上在java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) java.lang.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 - 模式必須匹配整個輸入字符串。