java.time.format.DateTimeParseException:无法在索引 3 处解析文本

2024-05-16

我正在使用 Java 8 解析日期并查找两个日期之间的差异。

这是我的片段:

String date1 ="01-JAN-2017";
String date2 = "02-FEB-2017";

DateTimeFormatter df = DateTimeFormatter .ofPattern("DD-MMM-YYYY", en);
LocalDate  d1 = LocalDate.parse(date1, df);
LocalDate  d2 = LocalDate.parse(date2, df);

Long datediff = ChronoUnit.DAYS.between(d1,d2);

当我运行时,我收到错误:

java.time.format.DateTimeParseException:无法在索引 3 处解析文本


首先,检查javadoc https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns。大写D代表一年中的某一天字段(不是每月的某一天如你所愿)和大写Y代表基于周的年份字段(不是year如你所愿)。正确的模式是小写字母d and y.

此外,您使用大写字母的月份名称 (JAN and FEB),所以你的格式化程序必须是不区分大小写(默认行为是只接受类似的值Jan and Feb)。这些月份名称是英文缩写,因此您还必须使用英文语言环境以确保它正确解析名称(使用java.util.Locale class).

因此,您的格式化程序应该像这样创建:

DateTimeFormatter df = new DateTimeFormatterBuilder()
    // case insensitive to parse JAN and FEB
    .parseCaseInsensitive()
    // add pattern
    .appendPattern("dd-MMM-yyyy")
    // create formatter (use English Locale to parse month names)
    .toFormatter(Locale.ENGLISH);

这将使您的代码正常工作(并且datediff32).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.time.format.DateTimeParseException:无法在索引 3 处解析文本 的相关文章

随机推荐