如何在没有 GMT 的情况下使用 java.time.ZonedDateTime 和 format.DateTimeFormatter?

ful*_*yan 4 java java-time

执行以下操作:

val zonedFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm z")

ZonedDateTime.from(zonedFormatter.parse("31.07.2020 14:15 GMT"))
Run Code Online (Sandbox Code Playgroud)

给我:

"displayDate": "2020-07-31T14:15:00Z[GMT]"
Run Code Online (Sandbox Code Playgroud)

我想要没有 [GMT] 的:

"displayDate": "2020-07-31T14:15:00Z"
Run Code Online (Sandbox Code Playgroud)

Arv*_*ash 7

您可以使用DateTimeFormatter.ISO_OFFSET_DATE_TIME格式化解析的ZonedDateTime. 但是,如果您希望日期时间始终采用 UTC,我建议您将解析后的数据转换ZonedDateTimeInstant.

演示:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("dd.MM.uuuu HH:mm z", Locale.ENGLISH);

        ZonedDateTime zdt = ZonedDateTime.from(dtfInput.parse("31.07.2020 14:15 GMT"));
        System.out.println(zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

        System.out.println(zdt.toInstant());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2020-07-31T14:15:00Z
2020-07-31T14:15:00Z
Run Code Online (Sandbox Code Playgroud)

ONLINE DEMO

Trail: Date Time了解有关现代日期时间 API *的更多信息。检查此答案此答案以了解如何将API 与 JDBC 结合使用。java.time


* 如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring 检查可用的 Java 8+ API。请注意,Android 8.0 Oreo 已提供java.time.