我最近发现了一个 java.time 错误。复制它非常容易;
我在 MacOS X 和 Centos Stream 9 上的 JDK 17.0.10 和 JDK 21.0.4 上进行了测试
代码为:
public class JakartaDateTime {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy");
LocalDateTime now = LocalDateTime.now();
System.out.println(formatter.format(now));
}
此代码将打印一个字符串
Fri Sept 06 23:10:23 2024
当然,这不是我预想的,预想的结果应该是:
Fri Sep 06 23:10:23 2024
我已将其作为错误报告给 java bug 报告和 Oracle bug 数据库 ID:9077542。我确信它不会很快得到修复。所以我必须找到一种解决方法来避免它。
我正在尝试使用 gson 将收入 json 映射到我们的 java 类,json 对象键/值对为:
{"date":"Fri Sep 06 23:10:23 2024"}
所以,我必须编写一个反序列化器来将该字符串解析为 java.time.LocalDateTime。我做了这样的事情:
public class EuDateTimeDeserializer implements JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
String dateTimeStr =jsonElement.getAsString();
if(!ThssUtils.isValidString(dateTimeStr)){
return null;
}else {
return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy"));
}
}
}
但是这个解串器仅适用于 9 月以外的其他月份。
抛出错误:
java.time.format.DateTimeParseException: Text 'Fri Sep 6 15:42:12 2024' could not be parsed at index 4
这意味着解串器无法识别上面的字符串。
有人有这样的经验来找到解决方法来避免以前的 java.time 错误吗?
请多指教!
虽然您忽略了确切提及您认为是“错误”的内容,但我认为您指的是 9 月与
t
中缺失的 Sep
。
日期时间格式中的拼写、缩写和标点符号取决于
Locale
。 Locale
对象中包含的人类语言和文化规范控制着本地化的过程。
Locale