我在SimpleDateFormat和DateTimeFormatter中使用相同的格式“ yyyyMM”。我在两个格式化程序中都设置了宽大处理。
尽管,SimpleDateFormat能够解析“ 2019 02”,但不能解析DateTimeFormatter。我尝试设置多个格式化程序,但是没有运气。
这必须是一种简单的方法,但我无法自行解决。有谁知道如何使用DateTimeFormatter恢复行为?
String dateString = "2018-11";
String format = "yyyyMM";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
simpleDateFormat.setLenient(true);
try {
Date parse = simpleDateFormat.parse(dateString);
System.out.println(parse);
System.out.println(format + ":parsed: true : java7");
} catch (ParseException e) {
System.out.println(format + ":parsed: false : java7");
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format).withResolverStyle(ResolverStyle.LENIENT);
try {
TemporalAccessor parse = formatter.parse(dateString);
System.out.println(parse.toString());
System.out.println(format + ": parsed: true : java11");
} catch (Exception e) {
System.out.println(format + ":parsed: false : java11");
e.printStackTrace();
}
答案 0 :(得分:0)
您可以创建带有DateTimeFormatterBuilder的复杂模式的DateTimeFormatter:
例如,要解析MyData
,yyyyMM
和yyyy-MM
,您可以使用:
yyyy MM
但是这种格式也很严格,因为年和月具有固定的宽度,否则可选的文字不起作用。
您可以添加DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR_OF_ERA, 4)
.optionalStart().appendLiteral('-').optionalEnd()
.optionalStart().appendLiteral(' ').optionalEnd()
.appendValue(ChronoField.MONTH_OF_YEAR, 2)
.toFormatter();
来简单地解析LocalDate。