Подтвердить что ты не робот

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 часов"...

4b9b3361

Ответ 1

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

public LocalDateTime plusHours(long hours)

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

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

Параметры:
    hours - часы, которые нужно добавить, могут быть отрицательными
Возврат:
    LocalDateTime, основанный на этом дате-времени с добавленными часами, а не 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);

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

Ответ 2

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

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

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

LocalDateTime after = currentTime.plusHours(12);
...