我想从各种日期字符串解析LocalDate对象。所有字符串的格式都是dd或。在第一种情况下,基准年应为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:文本'11-10-56‘不能在索引8处被解析.
任何帮助都将不胜感激!
发布于 2018-11-21 21:32:15
不需要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-08https://stackoverflow.com/questions/53420600
复制相似问题