В Java 8-временном API вы можете создать LocalDateTime, которое приходится на перекрытие времени во время изменения времени DST осенью (Центральноевропейское время).Как Java 8 time api выбирает смещение на период изменения DST
Вы можете преобразовать это в ZonedDateTime, которое представляет собой точный момент времени с помощью ZoneId.
Выполнение этого на самом деле не разрешает двусмысленность - все равно могут быть два момента времени, которые соответствуют этому LocalDateTime и этой зоне (но при разных смещениях).
Как и почему (справочный прием) API времени выбирает летнее смещение?
@Test
public void TimeSetOnDST() throws Exception {
LocalDateTime time = LocalDateTime.of(2016, 10, 30, 2, 30); // in the DST time overlap
ZonedDateTime of = ZonedDateTime.of(time, ZoneId.of("Europe/Zurich"));
System.out.println(of); // 2016-10-30T02:30+02:00[Europe/Zurich]
// But why not 2016-10-30T02:30+01:00[Europe/Zurich] ?
// Is this just "by convention"?
}
Спасибо. Тогда я согласен. – Philipp
Просто используйте ['withLaterOffsetAtOverlap()'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#withLaterOffsetAtOverlap--), если вы хотите изменить соглашение. (Соглашение было выбрано так, как это лучше, чем исключение или дополнительный параметр для большинства случаев использования.) – JodaStephen
Я чувствую, что соглашение выбрано разумно. «Документ LocalDateTime» говорит, что это «настенные часы», и соглашение следует тому, что мы все предполагаем, когда мы просыпаемся утром после смены DST :) –