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

时间:2019-05-30 05:07:21

标签: java date zoneddatetime

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

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

我得到的纬度和经度的zoneId为Pacific/Auckland

以此,我尝试从时间戳获取区域Pacific/Auckland上的本地时间,并期望显示以下conversion所显示的结果。

玩我的时间戳,我得到:

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

但是我正在寻找以下输出:

2013-07-10T14:52:49

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

我确信我们可以用日期来完成此操作,但是我是Java的新手,在冲浪了数小时之后,我仍未找到解决方案。

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

1 个答案:

答案 0 :(得分:1)

捕获日期时间

  

2013-07-10T02:52:49 + 12:00 [太平洋/奥克兰]

,将其捕获为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]