【发布时间】:2019-03-17 20:15:51
【问题描述】:
我在 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();
}
【问题讨论】:
-
你有一个我们可以运行的例子,看看我们自己的不同之处吗?详情请见stackoverflow.com/help/mcve。
-
@nucandrei,更新了问题。
-
2018-11 显然与 yyyyMM 不匹配。一个包含破折号,另一个不包含。只需使用正确的模式。
-
你在比较不同的方法。
-
如果你可以改变你的代码,为什么你不能改变它使用的模式呢?您的代码依赖于 SimpleDateFormat 的一个有问题的“功能”,并使用了不正确的模式。做正确的事,然后解决它。
标签: java-8