如何在 Java 中解析 UTC 日期/时间

Rob*_*wis 2 java datetime

给定以下格式的日期/时间字符串: 2021-12-05 21:10:00 UTC,如何将其解析为 Java DateTime 对象?它似乎需要一个格式化字符串,例如uuuu-MM-dd HH:mm:ss,但是我该如何处理“UTC”以及如何确保 Java 对象指定 UTC?

Pet*_*ček 8

您缺少的是时区说明符,例如。z

// first
private static final DateTimeFormatter DATETIME_PARSER
        = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss z");

//then
String dateString = "2021-12-05 21:10:00 UTC";
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, DATETIME_PARSER);
Run Code Online (Sandbox Code Playgroud)

这会正确生成您需要的日期时间对象。

也就是说,尚不清楚您是否需要z(时区名称)、VV(时区 ID)或v(通用时区名称),因为它们的含义都略有不同,并且都适用于“UTC”。请参阅文档以了解支持的格式


编辑:

数据来自位置已知的环境传感器,唯一重要的是日期/时间值是 UTC。

在这种情况下,没关系,只需使用z.

正如评论者正确建议的那样,如果您只关心时间线上的点并且不关心事件起源的时区,您可能需要使用而Instant不是:ZonedDateTime

Instant instant = Instant.from(DATETIME_PARSER.parse(dateString));
Run Code Online (Sandbox Code Playgroud)