Java 如何将offsetTime添加到UTC时间以获得正确的ZonedDateTime?
我想将UTC时间转换为LocalizedDateTime或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
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]
相同。