DateTimeFormatter parseBest()给出了'无法在索引8'例外

时间:2016-12-07 10:54:16

标签: date datetime time java-8 dateformatter

我对parseBest方法的工作原理有点困惑。 我有一个格式化模式,我使用parseBest方法解析日期,如下所示:

    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-07你好'无法在索引8处解析       at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)       at java.time.format.DateTimeFormatter.parseBest(DateTimeFormatter.java:1897)       在com.my.j8.DataTime.parseStr(DataTime.java:164)       在com.my.j8.DataTime.main(DataTime.java:158)

我尝试更改模式如下:      DateTimeFormatter parser = DateTimeFormatter.ofPattern(" yyyy-MM-dd");

但仍然没有运气。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

-dd之前,您的模式中有一个空格,因此您的日期都不匹配模式 - 匹配必须准确。

"yyyy-MM-dd['T'HH:mm:ss[Z]]"(没有空格)的模式适用于前3种模式。

最后一个模式仍然失败,因为模式与Hello不匹配 - 模式必须与整个输入字符串匹配。