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()
.
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);
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));
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);
Une alternative à LocalDate.now().atTime(6, 0)
est:
import Java.time.temporal.ChronoUnit;
LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);