Не могли бы вы объяснить, когда zonedDateTime.withZoneSameInstant (ZoneId.of ("UTC")). ToInstant () и zonedDateTime.toInstant () дают разные выходные данные? - PullRequest
0 голосов
/ 18 октября 2019

Может кто-нибудь заявить, когда эти два типа способов настроить 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());

1 Ответ

1 голос
/ 18 октября 2019

Мой вопрос был таков: эти два способа отличаются для других входов даты и времени, которые могут не обязательно иметь одинаковые форматы, часовой пояс или смещения.

Не может быть никакой разницы. Вы всегда получите одно и то же мгновение с обеих сторон.

Причина в том, что ZonedDateTime всегда однозначно определяет момент времени, момент. После преобразования в другой часовой пояс с использованием withZoneSameInstant новый ZonedDateTime всегда будет определять тот же момент времени, тот же момент.

Кстати, deHaar является правильным в комментарии: Ваша строкасодержит смещение от UTC, +11:00 и никакой часовой пояс, например, Asia/Shanghai, поэтому OffsetDateTime является более подходящим классом, чем ZonedDateTime для вашей цели.

...