- Classes principales :
LocalDate,LocalTime,LocalDateTime,ZonedDateTime. - Formatage et parsing : Utilisation de
DateTimeFormatterpour convertir entreStringetDate. - Manipulation de dates :
plus(),minus()pour ajouter ou soustraire du temps. - Comparaison de dates : Méthodes
isBefore(),isAfter(), etisEqual(). - Différence entre dates : Utilisation de
ChronoUnitpour obtenir des différences en unités de temps. DurationetPeriod: Pour mesurer les intervalles de temps.- Fuseaux horaires : Utilisation de
ZonedDateTimeetZoneIdpour gérer les dates avec fuseaux horaires. - Conversion avec
java.util.Date: Conversion entre les anciennes et nouvelles API de date.
Java 8 a introduit une nouvelle API date-time dans le package java.time. Voici les classes les plus importantes à connaître :
-
LocalDate: Représente une date sans heure, comme "2025-02-12".LocalDate today = LocalDate.now(); // Date actuelle LocalDate specificDate = LocalDate.of(2025, 2, 12); // Date spécifique
-
LocalTime: Représente une heure sans date, comme "14:30:00".LocalTime now = LocalTime.now(); // Heure actuelle LocalTime specificTime = LocalTime.of(14, 30); // Heure spécifique
-
LocalDateTime: Combine une date et une heure sans information de fuseau horaire.LocalDateTime dateTimeNow = LocalDateTime.now(); // Date et heure actuelles LocalDateTime specificDateTime = LocalDateTime.of(2025, 2, 12, 14, 30); // Date et heure spécifiques
-
ZonedDateTime: Représente une date et une heure avec un fuseau horaire spécifique.ZonedDateTime zonedDateTime = ZonedDateTime.now(); // Date et heure avec fuseau horaire
Le formatage et le parsing des dates sont des opérations courantes. DateTimeFormatter permet de transformer des objets LocalDate, LocalTime, LocalDateTime, ou ZonedDateTime en chaînes de caractères, et vice versa.
-
Formatage :
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDate = LocalDateTime.now().format(formatter); System.out.println(formattedDate); // Exemple : "2025-02-12 14:30:00"
-
Parsing (convertir une chaîne en date) :
String dateString = "2025-02-12 14:30:00"; LocalDateTime parsedDate = LocalDateTime.parse(dateString, formatter); System.out.println(parsedDate); // Exemple : "2025-02-12T14:30:00"
Les classes LocalDate, LocalTime, LocalDateTime, et ZonedDateTime permettent de manipuler les dates en ajoutant ou en soustrayant des périodes de temps.
-
Ajouter des jours, mois, années, heures, minutes, etc. :
LocalDate tomorrow = LocalDate.now().plusDays(1); // Ajouter 1 jour LocalDate nextMonth = LocalDate.now().plusMonths(1); // Ajouter 1 mois
-
Soustraire des jours, mois, années, heures, minutes, etc. :
LocalDate yesterday = LocalDate.now().minusDays(1); // Soustraire 1 jour LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1); // Soustraire 1 heure
Comparer des dates est une opération courante. Les classes comme LocalDate, LocalTime, LocalDateTime, et ZonedDateTime offrent des méthodes pour cela.
- Comparer les dates :
LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plusDays(1); System.out.println(today.isBefore(tomorrow)); // true System.out.println(today.isAfter(tomorrow)); // false System.out.println(today.isEqual(tomorrow)); // false
Si vous avez besoin de calculer la différence entre deux dates, vous pouvez utiliser la classe ChronoUnit qui offre une manière simple de calculer les différences en unités de temps (jours, mois, années, etc.).
- Différence en jours, mois, années, etc. :
LocalDate startDate = LocalDate.of(2025, 2, 1); LocalDate endDate = LocalDate.of(2025, 2, 12); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); // 11 jours System.out.println(daysBetween);
-
Duration: Utilisée pour les intervalles de temps sur des objetsLocalTime,LocalDateTime, ouZonedDateTime.LocalTime startTime = LocalTime.of(10, 0); LocalTime endTime = LocalTime.of(12, 30); Duration duration = Duration.between(startTime, endTime); // 2 heures 30 minutes System.out.println(duration.toHours()); // 2
-
Period: Utilisée pour les intervalles sur des objetsLocalDate(années, mois, jours).LocalDate startDate = LocalDate.of(2025, 1, 1); LocalDate endDate = LocalDate.of(2025, 2, 12); Period period = Period.between(startDate, endDate); // 1 mois et 11 jours System.out.println(period.getMonths()); // 1
ZonedDateTime vous permet de travailler avec des dates et heures tenant compte des fuseaux horaires.
-
Obtenir l'heure dans un fuseau horaire spécifique :
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York")); System.out.println(zonedDateTime);
-
Conversion entre fuseaux horaires :
ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); ZonedDateTime newYorkTime = tokyoTime.withZoneSameInstant(ZoneId.of("America/New_York")); System.out.println(newYorkTime);
Parfois, vous devez travailler avec les anciennes classes comme java.util.Date ou java.sql.Date. Vous pouvez facilement convertir entre ces classes et les nouvelles classes java.time :
-
Conversion de
java.util.DateversLocalDateTime:Date date = new Date(); // java.util.Date LocalDateTime localDateTime = date.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime();
-
Conversion de
LocalDateTimeversjava.util.Date:Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());