如何在 Java 中将格式为“Wed Oct 11 08:27:33 CEST 2023”的字符串转换为日期

0 java date

我需要将Java 中的String格式转换"Wed Oct 11 08:27:33 CEST 2023"为最新格式。

我尝试在下面使用,但它抛出解析错误。

String dateString = "Wed Oct 11 08:27:33 CEST 2023";
SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss XXX yyyy");
formatter.parse(dateString);
Run Code Online (Sandbox Code Playgroud)

坦白说,我不知道如何处理"CEST"部分

deH*_*aar 5

如果您不必处理大量大量使用的遗留代码,java.util.Date并且您使用的是 Java 版本 8 或更高版本,那么最好建议您使用java.time,即使所需的结果必须是java.util.Date.

这是一个使用java.time并生成 的示例java.util.Date

public static void main(String[] args) {
    // example input
    String input = "Wed Oct 11 08:27:33 CEST 2023";
    // define a formatter for the input including a locale
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
                                "EEE MMM dd HH:mm:ss z uuuu",
                                Locale.ENGLISH
                            );
    // parse the input using the formatter
    ZonedDateTime zdt = ZonedDateTime.parse(input, dtf);
    // print it
    System.out.println(ZonedDateTime.parse(input, dtf));
    // convert it to a java.util.Date
    Date date = Date.from(zdt.toInstant());
    // print the Date, too
    System.out.println(date);
}
Run Code Online (Sandbox Code Playgroud)

输出:

public static void main(String[] args) {
    // example input
    String input = "Wed Oct 11 08:27:33 CEST 2023";
    // define a formatter for the input including a locale
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
                                "EEE MMM dd HH:mm:ss z uuuu",
                                Locale.ENGLISH
                            );
    // parse the input using the formatter
    ZonedDateTime zdt = ZonedDateTime.parse(input, dtf);
    // print it
    System.out.println(ZonedDateTime.parse(input, dtf));
    // convert it to a java.util.Date
    Date date = Date.from(zdt.toInstant());
    // print the Date, too
    System.out.println(date);
}
Run Code Online (Sandbox Code Playgroud)

如果您必须使用java.utilandjava.text来完成此任务,请使用 az来解析时区名称(CEST欧夏令时间)并最好添加 a Locale.ENGLISH):

public static void main(String[] args) {
    // example input
    String input = "Wed Oct 11 08:27:33 CEST 2023";
    // create a matching parser
    SimpleDateFormat sdf = new SimpleDateFormat(
                                "EEE MMM dd HH:mm:ss z yyyy",
                                Locale.ENGLISH
                            );
    // parse the String
    Date date = sdf.parse(input);
    // print the Date
    System.out.println(date);
}
Run Code Online (Sandbox Code Playgroud)

输出:

2023-10-11T08:27:33+02:00[Europe/Paris]
Wed Oct 11 08:27:33 CEST 2023
Run Code Online (Sandbox Code Playgroud)