DateTimeFormatter parseBest() 给出“无法在索引 8 处解析”异常
Posted
技术标签:
【中文标题】DateTimeFormatter parseBest() 给出“无法在索引 8 处解析”异常【英文标题】:DateTimeFormatter parseBest() gives ' could not be parsed at index 8' exception 【发布时间】:2016-12-07 10:54:16 【问题描述】:我对 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:无法在索引 8 处解析文本“2016-12-07Hello” 在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 在 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 解析器 = DateTimeFormatter.ofPattern("yyyy-MM- dd");
但仍然没有运气。有什么建议吗?
【问题讨论】:
除了被否决,不要删除问题,因为这段代码可能会帮助某人做一些好的/最好的解析练习。 【参考方案1】:您的模式中 -dd
之前有一个空格,因此您的所有日期都与该模式不匹配 - 匹配必须准确。
"yyyy-MM-dd['T'HH:mm:ss[Z]]"
(没有空格)的模式适用于您的前 3 个模式。
最后一个模式仍然失败,因为该模式不匹配 Hello
- 该模式必须匹配整个输入字符串。
【讨论】:
以上是关于DateTimeFormatter parseBest() 给出“无法在索引 8 处解析”异常的主要内容,如果未能解决你的问题,请参考以下文章
Spark 和不可序列化的 DateTimeFormatter
DateTimeFormatter 为边缘情况提供错误格式[重复]
请别再使用 SimpleDateFormat 格式化时间了,DateTimeFormatter 更出色!
请别再使用 SimpleDateFormat 格式化时间了,DateTimeFormatter 更出色!