Java8 Добавление часов в LocalDateTime не работает

Я пробовал, как показано ниже, но в обоих случаях отображается одно и то же время? Что я делаю неправильно.

    LocalDateTime currentTime = LocalDateTime.now(ZoneId.of("UTC"));
    Instant instant = currentTime.toInstant(ZoneOffset.UTC);
    Date currentDate = Date.from(instant);
    System.out.println("Current Date = " + currentDate);
    currentTime.plusHours(12);
    Instant instant2 = currentTime.toInstant(ZoneOffset.UTC);
    Date expiryDate = Date.from(instant2);
    System.out.println("After 12 Hours = " + expiryDate);

"Текущая дата" Отображается время То же, что и "Через 12 часов"...


person Rajkishan Swami    schedule 23.06.2015    source источник


Ответы (2)


В документации LocalDateTime указано, что экземпляр LocalDateTime является неизменным, например plusHours

public LocalDateTime plusHours(long hours)

Возвращает копию этого LocalDateTime с указанным количеством добавленных часов.

Этот экземпляр неизменяем и не затрагивается этим вызовом метода.

Параметры:
hours — часы для добавления, могут быть отрицательными
Возвращает:
LocalDateTime на основе этой даты и времени с добавленными часами, not null
Выдает:
DateTimeException — если результат превышает поддерживаемый диапазон дат.

Итак, вы создаете новый экземпляр LocalDateTime при выполнении плюсовой операции, вам нужно присвоить это значение следующим образом:

LocalDateTime nextTime = currentTime.plusHours(12);
Instant instant2 = nextTime.toInstant(ZoneOffset.UTC);
Date expiryDate = Date.from(instant2);
System.out.println("After 12 Hours = " + expiryDate);

Я надеюсь, что это может быть полезно для вас.

person lavenderx    schedule 23.06.2015
comment
Черт, я пропустил неизменяемую часть. Теперь это работает. Большое спасибо. - person Rajkishan Swami; 23.06.2015

Из java.time пакета Javadoc (выделено мой):

Определенные здесь классы представляют основные концепции даты и времени, включая моменты, продолжительность, даты, время, часовые пояса и периоды. Они основаны на календарной системе ISO, которая де-факто является мировым календарем, следующим пролептическим григорианским правилам. Все классы являются неизменяемыми и потокобезопасными.

Поскольку каждый класс в пакете java.time неизменяем, вам необходимо зафиксировать результат:

LocalDateTime after = currentTime.plusHours(12);
...
person mkobit    schedule 23.06.2015