使用 java.time 将 UTC 日期时间转换为本地日期时间

Ser*_*gio 1 java java-time localdatetime

我有一个像这样的 UTC 日期时间(字符串):2022-11-22T17:15:00

还有一个像这样的 ZoneID:"America/Tijuana"

使用 java.time API,我想获取该区域的实际日期时间,即:(2022-11-22T09:15:00时间是 09:15 而不是 17:15)

  • ZonedDateTime.toLocalDateTime() 返回:2022-11-22T17:15
  • ZonedDateTime.toString() 返回: 2022-11-22T17:15-08:00[America/Tijuana]

以上都没有给我我正在寻找的东西。

这是我的代码:

    ZoneId zonaID = ZoneId.of('America/Tijuana');
    CharSequence dateUTC = "2022-11-22T17:15:00";
    LocalDateTime dateTimeL = LocalDateTime.parse(dateUTC);
    ZonedDateTime myZDT = ZonedDateTime.now();
    ZonedDateTime myZDTFinal = myZDT.of(dateTimeL, zonaID);
    System.out.println("using toLocalDateTime: " + myZDTFinal.toLocalDateTime());
    System.out.println("using toString: " + myZDTFinal.toString());
Run Code Online (Sandbox Code Playgroud)

我知道这可能是一个重复的问题,但有很多关于日期时间的问题,我只是无法弄清楚这一点。

任何帮助将不胜感激。

YCF*_*F_L 7

withZoneSameInstant您必须将日期转换为 UTC,然后使用以下命令将此区域转换为您期望的区域:

ZonedDateTime toUTCZone  = ZonedDateTime.of(dateTimeL, ZoneOffset.UTC);
ZonedDateTime myZDTFinal = toUTCZone.withZoneSameInstant(zonaID);
Run Code Online (Sandbox Code Playgroud)

输出

2022-11-22T09:15-08:00[America/Tijuana]
Run Code Online (Sandbox Code Playgroud)

  • 一个小更新:“ZoneOffset.UTC”是引用 UTC ZoneId 的更惯用方式。 (3认同)