我想将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
,在我的代码中也是如此。因此,如果网站显示的时间是我期望的,为什么我们没有得到相同的结果?
答案 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]