Java 8 个日期时间解析,可选 2-4 年组件
Java 8 date-time parsing with optional 2-4 year components
我想从各种日期字符串中解析 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: Text '11-10-56' could not be parsed at index 8
...
任何帮助将不胜感激!
不需要 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
我想从各种日期字符串中解析 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: Text '11-10-56' could not be parsed at index 8 ...
任何帮助将不胜感激!
不需要 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