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);