如何将 offsetTime 添加到 UTC 时间以获得正确的 ZonedDateTime?

How to add offsetTime to UTC time to get the right ZonedDateTime?

我想将 UTC 时间转换为 localisedDateTime 或 zonedDateTime。

我有以下输入:2013-07-10 02:52:49,-44.490947,171.220966日期时间是 UTC 时区。

我得到了带纬度和经度的 zoneId,这给了我 Pacific/Auckland

有了这个,我尝试从时间戳中获取 zonePacific/Auckland 的本地时间,并期望如下所示 conversion 我正在寻找的结果。

玩我的时间戳我得到:

2013-07-10T02:52:49+12:00[Pacific/Auckland]

但我正在寻找以下输出:

2013-07-10T14:52:49

我不认为操纵字符串将其更改为数字并手动添加是正确的答案。

我相信我们可以用日期来做到这一点,但我是 Java 的新手,在网上冲浪了几个小时后,我还没有找到我的解决方案。

下面的解决方案虽然看起来有效,但显示了日期 2013-07-9,我的代码中也是如此。因此,如果网站显示我期望的时间,为什么我们没有得到相同的结果?

当您捕获日期时间时

2013-07-10T02:52:49+12:00[Pacific/Auckland]

,将其捕获为 ZonedDateTime,以便它的时区为 UTC+12:00。

关于使用 dateTime.withZoneSameInstant(ZoneId.of("UTC")); 将日期时间转换为 UTC+0 HRS,结果为 2013-07-10T14:52:49

如果您将上述数据时间作为字符串,则可以将其转换为 UTC ZonedDateTime,如下所示。

    String time = "2013-07-10T02:52:49+12:00[Pacific/Auckland]";
    ZonedDateTime zdt = ZonedDateTime.parse(time);
    ZoneId zoneId = zdt.getZone();
    System.out.println(zdt);
    System.out.println(zdt.withZoneSameInstant(zoneId).toLocalDateTime());
    zdt = zdt.withZoneSameInstant(ZoneId.of("UTC"));
    System.out.println(zdt);

输出:

2013-07-10T02:52:49+12:00[Pacific/Auckland]
2013-07-10T02:52:49
2013-07-09T14:52:49Z[UTC]