使用 java8 在 springboot 中转换日期格式

Convert date format in springboot using java8

我收到以下日期格式

private String newDate = "Mon Apr 25 04:50:00 CET 2022"

如何在java8

中转换成如下格式
2022-04-25T04:50:00

您可以使用 Java 8 的 date/time API,更准确地说 DateTimeFormatter.

没有 pre-defined 格式化程序与您的初始输入匹配。最接近的是 DateTimeFormatter.RFC_1123_DATE_TIME,但它需要在星期几后加上逗号。

要解决这个问题,您可以编写自己的模式:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ROOT));
String input = "Mon Apr 25 04:50:00 CET 2022";
ZonedDateTime date = ZonedDateTime.parse(input, inputFormatter);

表示初始日期的最佳方式是 ZonedDateTime,因为您的日期包含 zone-related 信息。

对于您的输出,您可以使用 DateTimeFormatter.ISO_LOCAL_DATE_TIME 格式化程序。例如:

String output = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(date);

已经给出了几乎相同的答案。 给定的输入格式看起来像 Date.toSTring(),尤其是工作日和月份似乎是英语,但也可能是德语。下面是 Locale.ENGLISH(如“CET”所建议),但 Locale.GERMAN 可能更好。

    String newDate = "Mon Apr 25 04:50:00 CET 2022";
    DateTimeFormatter formatter =
        DateTimeFormatter.ofPattern("eee MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    ZonedDateTime t = ZonedDateTime.parse(newDate, formatter);
    System.out.println(t);
    System.out.println(Date.from(t.toInstant()));
    System.out.println(t.format(DateTimeFormatter.ISO_DATE_TIME));
    System.out.println(t.toLocalDateTime().format(DateTimeFormatter.ISO_DATE_TIME));
    System.out.println(t.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime()
        .format(DateTimeFormatter.ISO_DATE_TIME));

输出变体是:

Mon Apr 25 04:50:00 CEST 2022
2022-04-25T04:50+02:00[Europe/Paris]
2022-04-25T04:50:00+02:00[Europe/Paris]
2022-04-25T04:50:00
2022-04-25T02:50:00

确实最好从ZonedDateTime开始。

如果你在整个欧洲输入,最好使用协调世界时,格林威治时间。 (但往往依赖于已有的数据库数据。)