gpt4 book ai didi

java - 将挂钟时间从一个时区转换为另一时区

转载 作者:行者123 更新时间:2023-12-02 11:02:09 25 4
gpt4 key购买 nike

我想将挂钟时间从一个 TZ 转换为另一个 而无需自己进行 OFFSET 数学计算。

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z");
String d = sdf.format(new Date());
System.out.println(d);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String d1 = sdf.format(new Date());
System.out.println(d1);

输出:

2018.07.09 13:43:30 PDT
2018.07.09 16:43:30 EDT

期望的输出

2018.07.09 13:43:30 PDT
2018.07.09 13:43:30 EDT

如何获得所需的输出?

最佳答案

java.time 和 ThreeTen 向后移植

    DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss z", Locale.US);

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
String d = zdt.format(formatter);
System.out.println(d);

zdt = zdt.withZoneSameLocal(ZoneId.of("America/New_York"));
String d1 = zdt.format(formatter);
System.out.println(d1);

刚才运行代码时的输出:

2018.07.10 04:30:20 PDT
2018.07.10 04:30:20 EDT

您在评论中提到的 ZonedDateTime 类在其 withZoneSameLocal 方法中内置了您所需的转换。这将返回指定时区的相同挂钟时间。

As of now, we use Java 7. We have not upgraded our infra to java 8…

没什么大问题。 java.time 及其 ZonedDateTime 在 Java 7 上运行良好。它们至少需要 Java 6

  • 在 Java 8 及更高版本以及较新的 Android 设备(据我所知,从 API 级别 26 开始)中,现代 API 是内置的。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,即新类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保使用子包从 org. Threeten.bp 导入日期和时间类。

链接

关于java - 将挂钟时间从一个时区转换为另一时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com