我正在使用 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);
这将使您的代码正常工作(并且datediff
将32
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)