Qu'est-ce que c'est et pourquoi en avez-vous besoin ?
La manipulation des dates et des heures est l'une des tâches les plus courantes en programmation Java. La bibliothèque standard java.time (introduite dans Java 8) fournit une API puissante et intuitive pour traiter les dates, les heures, les fuseaux horaires et les périodes. Avant Java 8, les développeurs utilisaient souvent la bibliothèque tierce Joda-Time, qui a servi de prototype pour java.time. Les deux bibliothèques résolvent les problèmes des anciennes java.util.Date et java.util.Calendar : la sécurité des threads, l'immutabilité des objets et des méthodes de formatage pratiques.
Comment installer ?
java.time est intégré dans Java 8 et versions ultérieures — aucune installation n'est nécessaire. Pour Joda-Time, ajoutez la dépendance dans Maven :
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.12.5</version>
</dependency>Pour Gradle : implementation 'joda-time:joda-time:2.12.5'.
Fonctionnalités principales
- LocalDate, LocalTime, LocalDateTime — manipulation de la date/heure sans fuseau horaire.
- ZonedDateTime, OffsetDateTime — prise en compte des fuseaux horaires.
- Period, Duration — différence entre les dates et les heures.
- DateTimeFormatter — formatage et analyse flexibles.
- Instant — moment dans le temps en UTC.
Exemple de code Java
import java.time.*;
import java.time.format.DateTimeFormatter;
public class DateExample {
public static void main(String[] args) {
// Date actuelle
LocalDate today = LocalDate.now();
System.out.println("Aujourd'hui : " + today);
// Création d'une date spécifique
LocalDate specificDate = LocalDate.of(2025, Month.MARCH, 15);
System.out.println("Date spécifique : " + specificDate);
// Différence entre les dates
Period period = Period.between(specificDate, today);
System.out.println("Différence : " + period.getYears() + " ans, " + period.getMonths() + " mois, " + period.getDays() + " jours");
// Formatage
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String formatted = today.format(formatter);
System.out.println("Formaté : " + formatted);
// Analyse d'une chaîne
LocalDate parsed = LocalDate.parse("01.01.2024", formatter);
System.out.println("Analysé : " + parsed);
// Manipulation de l'heure et des fuseaux horaires
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
System.out.println("Heure de Moscou : " + zoned);
}
}Quand utiliser
java.time est le choix principal pour tous les nouveaux projets sur Java 8+. Utilisez-le pour : le calcul de l'âge, les délais, les logs avec horodatage, les planificateurs de tâches, la manipulation de calendriers et de fuseaux horaires. Joda-Time est utile pour la maintenance d'anciens projets ou si des fonctionnalités supplémentaires sont nécessaires, comme Interval ou MutableDateTime. Les deux bibliothèques simplifient considérablement le code par rapport à l'ancien Calendar.