Java 8: Как получить LocalDateTime на сегодня в определённый час?
Проблема: Есть ли более удобный способ создания объекта LocalDateTime
, представляющего сегодня в 6 утра, чем следующий код?
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
Лично мне не нравится работать с минутами, секундами и наносекундами, когда я просто хочу указать now().withHours()
.
2 ответ(ов)
Альтернативой выражению LocalDate.now().atTime(6, 0)
является следующий код:
import java.time.temporal.ChronoUnit;
LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);
Этот подход позволяет создать объект LocalDateTime
, который будет установлен на начало текущего дня, а затем установить время на 6:00. Использование truncatedTo(ChronoUnit.DAYS)
помогает избавиться от времени, оставляя только дату, после чего можно легко изменить часы с помощью withHour(6)
.
Да, это решение работает. Ваш код создает объект LocalDateTime
, представляющий текущее время, но при этом устанавливает часы на 3, минуты на 0 и секунды на 0. Вот как это выглядит:
LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);
Обратите внимание, что метод now()
возвращает текущее время, а методы withHour()
, withMinute()
и withSecond()
возвращают новый объект LocalDateTime
с заданными вами значениями, сохраняя остальные части даты и времени. Таким образом, данный код корректно меняет только указанные поля, а остальные остаются без изменений.
Преобразование между java.time.LocalDateTime и java.util.Date
Преобразование java.util.Date в java.time.LocalDate
Почему компилятор Java 11 использует invokevirtual для вызова приватных методов?
Java Лямбда-выражения [закрыто]
Сортировка строк без учета регистра в Java 8