找出绕过 Java.time 错误的解决方法

问题描述 投票:0回答:1

我最近发现了一个 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 错误吗?

请多指教!

java parsing exception design-patterns time
1个回答
0
投票

功能,而不是错误

虽然您忽略了确切提及您认为是“错误”的内容,但我认为您指的是 9 月与

t
中缺失的
Sep

日期时间格式中的拼写、缩写和标点符号取决于

Locale
Locale
对象中包含的人类语言和文化规范控制着本地化的过程。

指定
Locale

© www.soinside.com 2019 - 2024. All rights reserved.