【发布时间】:2021-10-19 00:33:54
【问题描述】:
我在下面有这些代码:
private void convertStringDatePosted() {
String stringDatePosted = "20 Janeiro 2021 00:26";
Locale locale = new Locale("pt", "MZ");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy HH:mm").withLocale(locale);
LocalDateTime aa = LocalDateTime.parse(stringDatePosted, formatter);
System.out.println(aa);
}
当我使用 java 8 运行代码时,它可以工作。但是对于 java 11,它会抛出这个异常:java.time.format.DateTimeParseException: Text '20 Janeiro 2021 00:26' could not be parsed at index 3。
我也有类似的情况,就是我要转换的字符串中有一个zone,代码是:
protected LocalDateTime getDatePosted() {
String dateScraped = "2021-08-15 09:00:28 (UTC+01:00)";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss (z)");
return LocalDateTime.parse(dateScraped, formatter);
}
如果使用 java 8 运行,它仍然可以工作,但使用 java 11 就不行。例外是: java.time.format.DateTimeParseException:无法在索引 24 处解析文本“20 Janeiro 2021 00:26”。
这个错误发生在 macOS 上,我还没有在其他操作系统上尝试过。
我不知道这个错误是由于java版本还是其他原因。期待你的答复。非常感谢!
【问题讨论】:
-
从一个快速的谷歌中,你会发现在葡萄牙语中,月份的名称是小写的。例如,请参阅this。所以写日期的预期方式是“20 janeiro 2021 00:26”
-
非常感谢您的支持,我的代码成功了。但是我不知道java 11和java 8之间的区别,为什么它在一个版本而不是另一个版本中工作?
-
它在 Java 8 中工作的原因可能是一个错误。通过searching for "portuguese" in the bugs database,有很多类似的错误与不以正确的大小写输出月份名称有关。虽然没有报告这个特定的错误。我想它是由于修复了另一个错误而得到修复的,或者有人直接修复了它而没有报告它。
-
哦,这太奇怪了。我将尝试在我的笔记本电脑上找出原因。感谢您提供的信息