Java 8 LocalDateTime сегодня в определенный час
есть ли лучше/проще Способ построения LocalDateTime
объект, представляющий сегодня в 6 утра, чем это?
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
как-то мне не нравится иметь дело с минутами/секундами/nano, когда все, что я хочу сказать, это now().withHours()
.
4 ответов
LocalDate
имеет различные перегружен atTime
методы, такие как этот, который принимает два аргумента (час дня и минуту):
LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0);
принятый ответ является хорошим. Вы также можете создать свой собственный часы для этого:
Clock clock = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(clock);
это может быть полезным вариантом при многократном использовании, потому что часы могут храниться в статической переменной:
public static final Clock CLOCK = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(CLOCK);
другой вариант (особенно, если вы хотите изменить уже существующий LocalDateTime
), чтобы использовать with()
метод.
принимает TemporalAdjuster
в качестве параметра. И согласно javadoc, передает LocalTime
в этот метод делает именно то, что вам нужно:
классы LocalDate и LocalTime реализуют TemporalAdjuster, поэтому этот метод можно использовать для изменения даты, времени или смещения:
результат = localDateTime.с(дата);
результат = localDateTime.с(Время);
да, код будет такой:
LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0));
альтернатива LocalDate.now().atTime(6, 0)
- это:
import java.time.temporal.ChronoUnit;
LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);