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