Voici une solution basée sur Java 8, utilisant la nouvelle fonction paquet java.time ( Tutoriel ).
Si vous pouvez utiliser des objets Java 8 dans votre code utiliser LocalDateTime
:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Si vous avez besoin de dates anciennes, c'est à dire java.util.Date
:
Convertir le LocalDateTime
que vous créez ci-dessus pour Date
en utilisant ces conversions :
LocalDateTime
-> ZonedDateTime
-> Instant
-> Date
-
Appelez atZone(zone)
avec un fuseau horaire spécifié (ou ZoneId.systemDefault()
pour le fuseau horaire par défaut du système) pour créer une ZonedDateTime
ajusté pour DST au besoin.
ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal"));
-
Appelez toInstant()
pour convertir le ZonedDateTime
à un Instant
:
Instant i = zdt.toInstant()
-
Enfin, appelez Date.from(instant)
pour convertir le Instant
à un Date
:
Date d1 = Date.from(i)
En résumé cela ressemblera à ceci pour vous :
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Date d1 = Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant());
Date d2 = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
Voir aussi section Code date-heure hérité (The Java™ Tutorials) pour l'interopérabilité de la nouvelle java.time
avec les anciennes fonctionnalités java.util
classes.