web-dev-qa-db-fra.com

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

Existe-t-il un moyen plus simple/plus simple de construire un objet LocalDateTime représentant aujourd'hui à 6 heures le matin?

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

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

17
JanM

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

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

Une autre alternative (spécialement si vous souhaitez modifier une LocalDateTime existante) consiste à utiliser la méthode with() .

Il accepte une TemporalAdjuster en 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));
3
user7605325

La réponse acceptée est bonne. Vous pouvez également créer votre propre clock 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 reprises, 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);
3
JodaStephen

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

import Java.time.temporal.ChronoUnit;

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);
2
flurdy