Способ, которым я его понимаю ... Мгновенное время в стиле UTC, агностик зоны всегда UTC. LocaleTime - это время в данной зоне. Таким образом, вы будете ожидать, что следующий будет работать при условии, что Instant реализует TemporalAccessor,
Instant instant = Instant.now();
LocalTime local = LocalTime.from(instant);
но вы получите «Невозможно получить МестноеВремя из TemporalAccessor» ошибка. Вместо этого вам нужно указать, где «местный». Нет дефолта - наверное, хорошо.
Instant instant = Instant.now();
LocalTime local = LocalTime.from(instant.atZone(ZoneId.of("GMT+3")));
System.out.println(String.format("%s => %s", instant, local));
Выход
2014-12-07T07:52:43.900Z => 10:52:43.900
instantStart.get (ChronoField.HOUR_OF_DAY) выдает ошибку, поскольку он не концептуально поддерживает его, вы можете получить доступ только HOUR_OF_DAY и т.д. с помощью экземпляра МестноеВремя.
Ah. Ну, тогда я много не разбирался в самих занятиях. Я пытаюсь сохранить время начала и окончания события в календаре как два экземпляра. затем введите продолжительность из этих экземпляров. Что мне делать вместо этого? Как мне следует хранить эту информацию с использованием классов Java 8 Time. Кроме того, я не уверен, что понимаю Temporal Accessors из объяснения, данного учебниками Oracle. Куда я могу пойти, чтобы узнать, что лучше? – Connorelsea
@Connorelsea Я не эксперт, я нахожу новый API java.time невероятно запутанным. Я думаю, что хранение мгновений было бы лучше и использовать LocalTime только тогда, когда вам действительно нужно отображать пользователя (в данном часовом поясе). – Adam
На самом деле, LocalTime не включает часовой пояс. В его javadoc говорится: «Этот класс не хранит или не представляет дату или зону времени. Вместо этого это описание местного времени, которое видно на настенных часах». Афайк, Мгновь не имеет понятия, как час дня, но только секунды с эпохи. Вот почему вам сначала нужно создать ZonedDateTime с этого момента. – Alex