如何将日期从这种格式“dd/MMM/yyyy”转换为具有 Java 17 版本的任何其他格式?

How to convert date from this format "dd/MMM/yyyy" to any other format with Java 17 version?

提问人:user3608694 提问时间:7/26/2023 更新时间:8/5/2023 访问量:186

问:

我正在尝试将日期从这种格式“dd/MMM/yyyy”转换为“yyyyMMdd”, 对于Java 1.8版本,代码工作正常,我的代码是

       SimpleDateFormat inputFormat = new SimpleDateFormat(currentFormat);
       SimpleDateFormat outputFormat = new SimpleDateFormat(newFormat);
       Date date = inputFormat.parse(dateStr);
       return outputFormat.format(date);

当我从 Java 8 更改为 java 17 时,我收到解析异常。请帮忙,谢谢

Java 日期 simpledateformat java-17

评论

1赞 Zabuzard 7/26/2023
请注意,您在那里使用的类都已过时。更喜欢使用这些东西。java.time
1赞 DuncG 7/26/2023
您使用的是什么输入?
0赞 Anonymous 8/5/2023
哪个是您的默认区域设置?在 Java 17 安装中是否与在 Java 8 安装中相同?另外,请至少发布异常的完整消息。
0赞 Anonymous 8/5/2023
Java 的语言环境数据(包括不同语言中几个月的缩写)从 Java 8 到 Java 9 发生了很大变化,此后又发生了进一步的变化。这是对您的错误的可能解释,但如果没有更多细节和最小的可重现示例,我们无法判断这是否是原因。在这个问题和这个问题中查看更多信息。

答:

2赞 Oleg Cherednik 7/26/2023 #1

对于 jvm17,请改用。java.time.*

public static String convert(String dateStr) {
    LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("dd/MMM/yyyy", Locale.ENGLISH));
    return date.format(DateTimeFormatter.BASIC_ISO_DATE, Locale.ENGLISH);
}

客户端的代码将如下所示:

String dateStr = "22/Jul/2023";
System.out.println(convert(dateStr));   // 20230722 

评论

3赞 Joop Eggen 7/26/2023
我认为未指定的区域设置无法处理MMM。
2赞 WJS 7/26/2023 #2

除非是向后兼容的要求,否则应避免使用旧的 Date 类及其支持类。它们是越野车和过时的。

从包装中。java.time

您想要的是预定义的BASIC_ISO_DATE。因此,所需要的只是格式。根据您的要求添加区域设置。from

String dateString = "10/Jan/2023";
 
DateTimeFormatter from = DateTimeFormatter.ofPattern("dd/MMM/yyyy", Locale.ENGLISH);
LocalDate ldt = LocalDate.parse(dateString, from);
String result = ldt.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(result);

指纹

20230110

查看 java.time 包,了解一组丰富的类来操作各种日期和时间。