我有分别返回时间和时区的 API

time: "2018-12-18 16:00:28"

timezone: "EDT"

我如何将其解析为 UTC 时间?

从 API 返回的时区:EDT、CDT、CST、EST 等。

我尝试在 Java 库 java.timejava.util.TimeZone 中找到解决方案,但它们不适用于某些时区名称。

最佳答案

将您的字符串连接在一起,以便它们可以一起解析。然后,您可以在将区域更改为您想要的任何内容之前解析为 ZonedDateTime

String timestamp = "2018-12-18 16:00:28";
String zone = "EDT";
String timeWithZone = timestamp + ' ' + zone;

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_LOCAL_DATE)
    .appendLiteral(' ')
    .append(DateTimeFormatter.ISO_LOCAL_TIME)
    .appendLiteral(' ')
    .appendPattern("z") // Zone
    .toFormatter();

ZonedDateTime edt = ZonedDateTime.parse(timeWithZone, formatter);
ZonedDateTime utc = edt.withZoneSameInstant(ZoneId.of("UTC"));

关于 java 。根据时区名称将 EDT、CDT、CST 等时区的时间转换为 UTC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53834942/

10-12 01:47