gpt4 book ai didi

java - 使用 LocalDate 将一个日期更改为另一种日期格式

转载 作者:行者123 更新时间:2023-11-30 10:00:53 25 4
gpt4 key购买 nike

我有以下输入作为

Map<String,String>

1) MM dd yyyy = 08 10 2019
2) dd MM yyyy = 10 05 2019
3) dd MM yyyy = 05 10 2008
4) yyyy dd MM = 2001 24 01

我想将所有这些日期转换为“yyyy-MM-dd”格式

目前,我正在使用

for (String eachFormat : formats) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(eachFormat);
try {
SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
Date inputDate = simpleDateFormat.parse(parsedDate.get(eachFormat));
return targetFormat.format(inputDate);
} catch (ParseException e) {
LOGGER.error(e);
}
}

但是“simpleDateFormat.parse()”将使用时区转换并给我日期。转换时我不想要时区。我想直接将一种日期格式转换为其他日期格式。我正在探索 LocalDate 作为 Java 8 功能。但是如果我尝试它会失败

DateTimeFormatter target = DateTimeFormatter.ofPattern(eachFormat);
LocalDate localDate = LocalDate.parse(parsedDate.get(eachFormat),target);

请帮助我处理 LocalDate 和 DateTimeFormatter。

编辑 1:好的,我对输入 Map 示例不好,这是我实际使用的 Map 进入程序

1) MM dd yy = 8 12 2019
2) dd MM yy = 4 5 2007
3) yy dd MM = 2001 10 8

我猜识别并给我这张 map 的人正在使用 SimpleDate 格式化程序,因为我假设 SimpleDateFormatter 可以将日期“8 12 2019”识别为“MM dd yy”或“M dd yyyy”或“MM d yy” "或 "MM d yyyy"...

但是“LocalDate”非常严格,它不是解析日期

"8 12 2019" for "dd MM yy"

当且仅当日期格式严格解析

"8 12 2019" is "d MM yyyy"

...现在我该怎么办?

最佳答案

没错,老麻烦的SimpleDateFormat在解析的时候一般不太注意格式模式字符串中模式字母的个数。 DateTimeFormatter 可以,这通常是一个优势,因为它可以更好地验证字符串。 MM 月份需要两位数字。 yy 需要两位数的年份(如 19 代表 2019)。由于您需要能够解析一位数的月份和日期以及四位数的年份,我建议我们修改格式模式字符串以准确地告诉 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

关于java - 使用 LocalDate 将一个日期更改为另一种日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com