1 回答
TA贡献1784条经验 获得超7个赞
是的,老的,SimpleDateFormat解析的时候麻烦,一般都不太关注格式模式字符串中模式字母的个数。DateTimeFormatter确实如此,这通常是一个优点,因为它可以更好地验证字符串。MM月份需要两位数。yy需要两位数的年份(例如 2019 年为 19)。由于您需要能够解析一位数字的月份、月份中的某一天以及四位数字的年份,因此我建议我们修改格式模式字符串以准确地说明DateTimeFormatter这一点。我正在改变MM到M,dd到d,yy到y。这将导致DateTimeFormatter不必担心位数(一个字母基本上意味着至少一位数字)。
Map<String, String> formattedDates = Map.of(
"MM dd yy", "8 12 2019",
"dd MM yy", "4 5 2007",
"yy dd MM", "2001 10 8");
for (Map.Entry<String, String> e : formattedDates.entrySet()) {
String formatPattern = e.getKey();
// Allow any number of digits for each of year, month and day of month
formatPattern = formatPattern.replaceFirst("y+", "y")
.replace("dd", "d")
.replace("MM", "M");
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern(formatPattern);
LocalDate date = LocalDate.parse(e.getValue(), sourceFormatter);
System.out.format("%-11s was parsed into %s%n", e.getValue(), date);
}
该片段的输出是:
8 12 2019 was parsed into 2019-08-12
4 5 2007 was parsed into 2007-05-04
2001 10 8 was parsed into 2001-08-10
添加回答
举报