您能否解释一下zonedDateTime.withZoneSameInstant(ZoneId.of(“ UTC”))。toInstant()和zonedDateTime.toInstant()何时提供不同的输出?

问题描述 投票:-2回答:1

有人可以说明这两种将ZonedDateTime调整为UTC的方式吗?如果可能,还提供一些测试事件的日期时间。

String eventDate = "2016-11-28T10:56:28+11:00"; // my example date time
ZonedDateTime zonedDateTime = ZonedDateTime.parse(eventDate.trim(), 
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"));
// defaulting to UTC Zone 

//1st way
System.out.println(zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toInstant());

//2nd way
System.out.println(zonedDateTime.toInstant());
java datetime java-time
1个回答
0
投票

我的问题是,对于其他日期时间输入,这两种方式可能有所不同,而这些日期时间输入不一定具有相同的格式,时区或偏移量。

没有任何区别。两种方式都将始终获得相同的瞬间。

原因是:ZonedDateTime始终唯一地定义一个时间点,即瞬间。使用withZoneSameInstant转换到另一个时区后,新的ZonedDateTime将始终定义相同时间点,同一时刻。

BTW deHaar在注释中是正确的:您的字符串包含UTC的偏移量+11:00,并且没有像Asia/Shanghai这样的时区,因此对于您的目的,OffsetDateTimeZonedDateTime更合适。

© www.soinside.com 2019 - 2024. All rights reserved.