我想从各种日期字符串中解析LocalDate对象。所有字符串都已经具有dd-MM-yy或dd-MM-yyyy格式。在第一种情况下,基年应加19而不是20。
我有此代码,但无法正常工作。我究竟做错了什么?
public static LocalDate parseDateString(String date) {
DateTimeFormatter optionalFullYearParser = java.time.format.DateTimeFormatter.ofPattern("[dd-MM-yy][dd-MM-yyyy]");
DateTimeFormatter parser = new DateTimeFormatterBuilder()
.appendOptional(optionalFullYearParser)
.appendValueReduced(ChronoField.YEAR, 2, 4, 1900)
.toFormatter(new Locale ("nl","NL"));
return java.time.LocalDate.parse(date,parser);
}
System.out.println(parseDateString("11-10-56").toString());
System.out.println(parseDateString("11-10-1956").toString());
System.out.println(parseDateString("08-05-51").toString());
当我运行此代码时,它将引发异常:
java.time.format.DateTimeParseException:无法在索引8处解析文本“ 11-10-56” ...
任何帮助将不胜感激!
答案 0 :(得分:2)
不需要2个格式化程序对象来执行此操作,并且在使用appendValueReduced
添加年份部分时,不应在格式文本中包含年份部分。
public static LocalDate parseDateString(String date) {
DateTimeFormatter parser = new DateTimeFormatterBuilder()
.appendPattern("dd-MM-")
.appendValueReduced(ChronoField.YEAR, 2, 4, 1900)
.toFormatter(Locale.forLanguageTag("nl-NL"));
return java.time.LocalDate.parse(date, parser);
}
测试
System.out.println(parseDateString("11-10-56").toString());
System.out.println(parseDateString("11-10-1956").toString());
System.out.println(parseDateString("08-05-51").toString());
输出
1956-10-11
1956-10-11
1951-05-08