使用 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
开始。
如果你在整个欧洲输入,最好使用协调世界时,格林威治时间。 (但往往依赖于已有的数据库数据。)
我收到以下日期格式
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
开始。
如果你在整个欧洲输入,最好使用协调世界时,格林威治时间。 (但往往依赖于已有的数据库数据。)