java - 使用 java.time 根据时区转换时间

标签 java time java-8 java-time

如何根据 LocalDateTime 中的时区更改时间,这里我已经建立了一个时区为 EST 的日期,现在我需要找到 UTC 的相应时间。请帮我解决这个问题

String str = "16Jun2015_153556";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMMyyyy_HHmmss");
formatter.withZone(ZoneId.of("EST5EDT"));
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

最佳答案

您不应该考虑“更改时区”的 LocalDateTime - LocalDateTime 没有 时区。相反,您应该从 LocalDateTime 和时区 (ZoneId) 构建一个 ZonedDateTime。首先删除 formatter.withZone 调用,然后使用:

ZonedId zone = ZoneId.of("EST5EDT"); // Or preferrably "America/New_York"
ZonedDateTime zoned = ZonedDateTime.of(dateTime, zone);

然后您可以将其转换为瞬间,或者使用:

ZonedDateTime utc = zoned.withZoneSameInstant(ZoneOffset.UTC);

例如:

import java.time.*;
import java.time.format.*;

public class Test {
    public static void main(String[] args) {
        String str = "16Jun2015_153556";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMMyyyy_HHmmss");
        ZoneId zone = ZoneId.of("America/New_York");
        LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
        ZonedDateTime zoned = ZonedDateTime.of(dateTime, zone);

        // Both of these print 2015-06-16T19:35:56Z
        System.out.println(zoned.toInstant()); 
        System.out.println(zoned.withZoneSameInstant(ZoneOffset.UTC));
    }
}

关于java - 使用 java.time 根据时区转换时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872473/

相关文章:

java - 如何在定时循环中检测按钮按下情况

python - 如何从文本文件中的特定行获取计时并用Python中的另一行减去它?

Java 8 : How can it precede Java 7's general adoption

java - 在 wicket7 中填写表格并输入 key 提交

java - 将 forEachOrdered 与并行流一起使用的好处

java - 转换来自 Blobstore 的图像

java - 托管 Bean - 仅在页面加载时执行代码

java - Spring Boot Micrometer Metric system_load_average_1m 说明

c# - 将2次之间的差异转换为毫秒?

time - Elixir 中的 utc_offset 返回错误的时区偏移量