2014-12-07 4 views
7

Я не очень разбираюсь в Temporal Adjusters или новой библиотеке времени Java даже после прочтения многочисленных руководств.Как преобразовать Мгновенное в LocalTime?

Как преобразовать объект Instant в объект LocalTime. Я что-то думал о следующих строках:

LocalTime time = LocalTime.of(
     instantStart.get(ChronoField.HOUR_OF_DAY), 
     instantStart.get(ChronoField.MINUTE_OF_HOUR) 
    ); 

Но он не работает. Как мне это сделать?

ответ

11

Способ, которым я его понимаю ... Мгновенное время в стиле 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 и т.д. с помощью экземпляра МестноеВремя.

+0

Ah. Ну, тогда я много не разбирался в самих занятиях. Я пытаюсь сохранить время начала и окончания события в календаре как два экземпляра. затем введите продолжительность из этих экземпляров. Что мне делать вместо этого? Как мне следует хранить эту информацию с использованием классов Java 8 Time. Кроме того, я не уверен, что понимаю Temporal Accessors из объяснения, данного учебниками Oracle. Куда я могу пойти, чтобы узнать, что лучше? – Connorelsea

+2

@Connorelsea Я не эксперт, я нахожу новый API java.time невероятно запутанным. Я думаю, что хранение мгновений было бы лучше и использовать LocalTime только тогда, когда вам действительно нужно отображать пользователя (в данном часовом поясе). – Adam

+0

На самом деле, LocalTime не включает часовой пояс. В его javadoc говорится: «Этот класс не хранит или не представляет дату или зону времени. Вместо этого это описание местного времени, которое видно на настенных часах». Афайк, Мгновь не имеет понятия, как час дня, но только секунды с эпохи. Вот почему вам сначала нужно создать ZonedDateTime с этого момента. – Alex

Смежные вопросы