Java 8 LocalDateTime aujourd’hui à une heure précise

Existe-t-il un moyen plus simple / plus simple de construire LocalDateTime object LocalDateTime représentant aujourd’hui à 6 heures du matin?

 LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0); 

D’une manière ou d’une autre, je n’aime pas avoir affaire à minutes / secondes / nano quand tout ce que je veux dire, c’est now().withHours() .

LocalDate a diverses méthodes atTime surchargées, telles que celle-ci , qui prend deux arguments (heure du jour et minute):

 LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0); 

La réponse acceptée est bonne. Vous pouvez également créer votre propre horloge pour le faire:

 Clock clock = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1)); LocalDateTime dt = LocalDateTime.now(clock); 

Cette option peut être utile si elle est utilisée à plusieurs resockets, car l’horloge peut être stockée dans une variable statique:

 public static final Clock CLOCK = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1)); LocalDateTime dt = LocalDateTime.now(CLOCK); 

Une autre alternative (spécialement si vous souhaitez modifier un LocalDateTime déjà existant) consiste à utiliser la méthode with() .

Il accepte un TemporalAdjuster tant que paramètre. Et selon javadoc , passer un LocalTime à cette méthode fait exactement ce dont vous avez besoin:

Les classes LocalDate et LocalTime implémentent TemporalAdjuster. Cette méthode peut donc être utilisée pour modifier la date, l’heure ou le décalage:

resultat = heure locale locale.with (date);
resultat = heure locale locale.with (heure);

Donc, le code sera:

 LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0)); 

Une alternative à LocalDate.now().atTime(6, 0) est:

 import java.time.temporal.ChronoUnit; LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);