Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将offsetTime添加到UTC时间以获得正确的ZonedDateTime?_Java_Date_Zoneddatetime - Fatal编程技术网

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

Java 如何将offsetTime添加到UTC时间以获得正确的ZonedDateTime?,java,date,zoneddatetime,Java,Date,Zoneddatetime,我想将UTC时间转换为LocalizedDateTime或zonedDateTime 我有以下输入:2013-07-10 02:52:49,-44.490947171.220966其中日期时间为UTC时区 我得到了纬度和经度的zoneId,这给了我太平洋/奥克兰 有了这个,我试着从时间戳中获取太平洋/奥克兰地区的本地时间,并期望得到如下所示的结果 玩我的时间戳,我得到: 2013-07-10T02:52:49+12:00[太平洋/奥克兰] 但我正在寻找以下输出: 2013-07-10T14:52

我想将UTC时间转换为LocalizedDateTime或zonedDateTime

我有以下输入:
2013-07-10 02:52:49,-44.490947171.220966
其中日期时间为UTC时区

我得到了纬度和经度的zoneId,这给了我
太平洋/奥克兰

有了这个,我试着从时间戳中获取太平洋/奥克兰地区的本地时间,并期望得到如下所示的结果

玩我的时间戳,我得到:

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

但我正在寻找以下输出:

2013-07-10T14:52:49

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

我确信我们可以用日期来做这件事,但我对Java是新手,在浏览了几个小时之后,我还没有找到我的解决方案


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

当你捕获日期时间时

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

,将其捕获为ZoneDateTime,以便将该区域设置为UTC+12:00

使用
dateTime.withZoneSameInstant(ZoneId.of(“UTC”)将日期时间转换为UTC+0小时,结果为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]

听起来你好像误解了。字符串中的+12:00表示与UTC相比已经增加了12小时。因此,要转换为UTC,您需要再次减去它们。同一时刻的正确UTC时间是2013-07-09T14:52:49+00:00,因此是7月9日。您是正确的:您不应该将其作为字符串操作。它是正确的,因此给出了正确的结果(
2013-07-09T14:52:49Z[UTC]
zdt。withZoneSameInstant(zoneId)
是多余的,通常您不想转换为
LocalDateTime
,从而丢弃时区信息。为什么您的日期是9号而不是10号?奥克兰提前到达UTC,我希望
(2013-07-10T14:52:49Z[UTC])
@SantaClauze如果奥克兰的时间比UTC时间早,那么奥克兰的时间应该晚一些,例如,如果UTC时间是06:15,那么奥克兰的时间就晚了12个小时,即18:45。
2013-07-10T02:52:49+12:00[太平洋/奥克兰]
的瞬间与
2013-07-09T14:52:49Z[UTC]
相同。