CodeGym /Cours /JAVA 25 SELF /LocalDate, LocalTime, LocalDateTime

LocalDate, LocalTime, LocalDateTime

JAVA 25 SELF
Niveau 13, Leçon 2
Disponible

1. LocalDate : date sans heure ni fuseau horaire

LocalDate, c’est simplement une date. Sans heure, sans fuseau horaire, sans tracas superflus. Comme une page de calendrier : 2025-06-01, et c’est tout. Si vous ne vous souciez pas de l’instant exact de « minuit » selon les villes, et qu’il vous faut simplement « 1er juin 2025 », utilisez LocalDate.

Comment créer LocalDate ?

Il existe plusieurs façons, toutes simples et pratiques.

Date actuelle

import java.time.LocalDate;

LocalDate today = LocalDate.now();
System.out.println(today); // Par exemple, 2025-06-01

Date précise

LocalDate birthday = LocalDate.of(1990, 12, 15);
System.out.println(birthday); // 1990-12-15

Vous pouvez utiliser des nombres pour l’année, le mois et le jour. Le mois est un nombre de 1 à 12 (janvier = 1, décembre = 12).

Analyse depuis une chaîne

LocalDate parsedDate = LocalDate.parse("2025-06-01");
System.out.println(parsedDate); // 2025-06-01

La chaîne doit être au format yyyy-MM-dd. Si le format ne correspond pas, une exception sera levée.

Récupérer les composants d’une date

LocalDate propose des méthodes qui renvoient les différentes parties de la date :

int year = today.getYear();           // 2025
int month = today.getMonthValue();    // 6 (juin)
int day = today.getDayOfMonth();      // 1
System.out.println("Année : " + year + ", mois : " + month + ", jour : " + day);

Si vous voulez obtenir le mois en toutes lettres, utilisez la méthode getMonth() :

System.out.println(today.getMonth()); // JUNE

Et si vous avez besoin du jour de la semaine — utilisez la méthode getDayOfWeek() :

System.out.println(today.getDayOfWeek()); // SATURDAY

Exemple pratique

Poursuivons le développement de votre application console d’apprentissage : elle peut désormais souhaiter un joyeux anniversaire à l’utilisateur.

import java.time.LocalDate;

public class BirthdayApp {
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(2000, 2, 29);
        System.out.println("Date de naissance : " + birthday);
        System.out.println("Jour de la semaine de naissance : " + birthday.getDayOfWeek());
    }
}

2. LocalTime : heure sans date ni fuseau horaire

LocalTime, c’est simplement l’heure. Heures, minutes, secondes (et même nanosecondes). Mais sans date ! Si vous devez stocker, par exemple, « l’heure d’ouverture du magasin » ou « l’heure de début de la réunion » sans lien avec une date — c’est la classe qu’il vous faut.

Comment créer LocalTime ?

Heure actuelle

import java.time.LocalTime;

LocalTime now = LocalTime.now();
System.out.println(now); // Par exemple, 14:37:12.123456789

Heure précise

LocalTime lunchTime = LocalTime.of(13, 30); // 13:30:00
System.out.println(lunchTime);

Vous pouvez ajouter des secondes et des nanosecondes :

LocalTime precise = LocalTime.of(8, 15, 30, 123_000_000); // 08:15:30.123
System.out.println(precise);

Analyse depuis une chaîne

LocalTime parsedTime = LocalTime.parse("14:30:00");
System.out.println(parsedTime); // 14:30

Récupérer les composants de l’heure

int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
System.out.println("Heures : " + hour + ", minutes : " + minute + ", secondes : " + second);

Exemple pratique

Ajoutons une « horloge » à notre application :

import java.time.LocalTime;

public class ClockApp {
    public static void main(String[] args) {
        LocalTime current = LocalTime.now();
        System.out.println("Maintenant : " + current);
        System.out.println("Heure : " + current.getHour());
        System.out.println("Minute : " + current.getMinute());
    }
}

3. LocalDateTime : date et heure sans fuseau horaire

LocalDateTime est un combo : date + heure, mais toujours sans fuseau horaire. Par exemple, « 2025-06-01 14:30:00 ». C’est pratique lorsque vous voulez stocker un moment sans vous soucier de l’endroit où il sera lu.

Comment créer LocalDateTime ?

Date et heure actuelles

import java.time.LocalDateTime;

LocalDateTime now = LocalDateTime.now();
System.out.println(now); // Par exemple, 2025-06-01T14:30:15.123456789

Date et heure précises

LocalDateTime meeting = LocalDateTime.of(2025, 6, 1, 14, 30);
System.out.println(meeting); // 2025-06-01T14:30

Vous pouvez ajouter des secondes et des nanosecondes :

LocalDateTime preciseMeeting = LocalDateTime.of(2025, 6, 1, 14, 30, 45, 123_000_000);
System.out.println(preciseMeeting); // 2025-06-01T14:30:45.123

Analyse depuis une chaîne

LocalDateTime parsed = LocalDateTime.parse("2025-06-01T14:30:00");
System.out.println(parsed); // 2025-06-01T14:30

Remarque : la lettre T sépare la date de l’heure selon la norme ISO.

Récupérer les composants

int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
System.out.println("Date : " + year + "-" + month + "-" + day + " Heure : " + hour + ":" + minute);

4. Opérations courantes sur les dates et les heures

Maintenant que nous savons créer des objets de date et d’heure, apprenons à faire quelque chose d’utile avec eux.

Addition et soustraction

Les trois classes (LocalDate, LocalTime, LocalDateTime) sont immuables. Cela signifie que des méthodes comme plusDays() ou minusMonths() renvoient un nouvel objet sans modifier l’original.

LocalDate

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate lastMonth = today.minusMonths(1);
System.out.println("Aujourd’hui : " + today);
System.out.println("Demain : " + tomorrow);
System.out.println("Il y a un mois : " + lastMonth);

LocalTime

LocalTime now = LocalTime.now();
LocalTime inTenMinutes = now.plusMinutes(10);
System.out.println("Maintenant : " + now);
System.out.println("Dans 10 minutes : " + inTenMinutes);

LocalDateTime

LocalDateTime start = LocalDateTime.of(2025, 6, 1, 14, 0);
LocalDateTime end = start.plusHours(2).minusMinutes(15);
System.out.println("Début : " + start);
System.out.println("Fin : " + end);

Comparaison des dates et des heures

Toutes ces classes possèdent les méthodes isBefore(), isAfter(), isEqual() :

LocalDate birthday = LocalDate.of(2000, 2, 29);
LocalDate today = LocalDate.now();

if (today.isAfter(birthday)) {
    System.out.println("Vous êtes plus âgé que si vous veniez tout juste de naître !");
}
LocalTime morning = LocalTime.of(8, 0);
LocalTime now = LocalTime.now();

if (now.isBefore(morning)) {
    System.out.println("Il est encore trop tôt pour se lever...");
} else {
    System.out.println("Il est temps de se réveiller !");
}

Obtenir la date/l’heure actuelles

Comme vous l’avez déjà vu, les méthodes now() renvoient les valeurs actuelles :

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

5. Pratique : exemples et exercices

Exemple 1 : jour de la semaine pour n’importe quelle date

import java.time.LocalDate;

public class DayOfWeekApp {
    public static void main(String[] args) {
        LocalDate anyDate = LocalDate.of(2025, 12, 31);
        System.out.println("Le 31 décembre 2025 — c’est " + anyDate.getDayOfWeek());
    }
}

Exemple 2 : combien de jours jusqu’au Nouvel An ?

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class DaysToNewYear {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate newYear = LocalDate.of(today.getYear() + 1, 1, 1);
        long daysLeft = ChronoUnit.DAYS.between(today, newYear);
        System.out.println("Il reste " + daysLeft + " jours avant le Nouvel An !");
    }
}

Exemple 3 : vérifier si l’année est bissextile

import java.time.LocalDate;

public class LeapYearCheck {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, 1, 1);
        if (date.isLeapYear()) {
            System.out.println(date.getYear() + " — année bissextile !");
        } else {
            System.out.println(date.getYear() + " — année ordinaire.");
        }
    }
}

Exemple 4 : différence entre deux heures

import java.time.LocalTime;
import java.time.Duration;

public class TimeDifference {
    public static void main(String[] args) {
        LocalTime start = LocalTime.of(9, 0);
        LocalTime end = LocalTime.of(17, 30);
        Duration duration = Duration.between(start, end);
        System.out.println("La journée de travail dure " + duration.toHours() + " heures " +
                (duration.toMinutes() % 60) + " minutes.");
    }
}

6. Erreurs typiques

Erreur n° 1 : confondre LocalDateTime et ZonedDateTime.
LocalDateTime ne contient aucune information de fuseau horaire ! Si vous stockez des horaires de vols entre des pays ou des événements qui se déroulent dans différents fuseaux — utilisez ZonedDateTime, sinon vous risquez d’obtenir des résultats inattendus lors du transfert de données entre systèmes.

Erreur n° 2 : utiliser un format de chaîne incorrect pour l’analyse.
Par exemple, tenter d’analyser 01.06.2025 avec LocalDate.parse(). Par défaut, on attend le format 2025-06-01. Pour d’autres formats, il faut un DateTimeFormatter spécifique (nous verrons cela dans le prochain cours !).

Erreur n° 3 : penser que des méthodes comme plusDays() modifient l’objet.
Non ! Tous les objets sont immuables. La méthode renvoie un nouvel objet et l’ancien reste inchangé.

Erreur n° 4 : utiliser LocalTime pour stocker un instant absolu.
LocalTime ne sert qu’à l’heure locale de la journée. Si vous voulez conserver un « instant dans le temps », utilisez Instant ou ZonedDateTime.

Erreur n° 5 : oublier la numérotation des mois (1 = janvier, 12 = décembre).
Dans LocalDate.of(year, month, day), le mois commence à 1 (et non à 0, comme dans certains autres langages ou anciens API).

1
Mission
JAVA 25 SELF, niveau 13, leçon 2
Bloqué
Horloges magiques: affichage de l'heure exacte 🕰️
Horloges magiques: affichage de l'heure exacte 🕰️
1
Mission
JAVA 25 SELF, niveau 13, leçon 2
Bloqué
Prédiction astrologique : anniversaire et jour de la semaine 🌟
Prédiction astrologique : anniversaire et jour de la semaine 🌟
1
Mission
JAVA 25 SELF, niveau 13, leçon 2
Bloqué
Programme des rendez-vous : qui est le plus tôt ? ⏰
Programme des rendez-vous : qui est le plus tôt ? ⏰
1
Mission
JAVA 25 SELF, niveau 13, leçon 2
Bloqué
Ajustement de l'heure de la mission secrète 🚀
Ajustement de l'heure de la mission secrète 🚀
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION