Travail avec les dates et l'heure en Java : méthodes avancées et API

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travail avancé avec les dates et l'heure en Java : des bases au professionnalisme

\n\n

Le travail avec les dates et l'heure est l'une des tâches clés de toute application d'entreprise. En Java, la norme a longtemps été l'encombrant java.util.Date et java.util.Calendar, mais avec la sortie de Java 8, la situation a radicalement changé. La nouvelle API java.time (JSR-310) a offert aux développeurs un ensemble d'outils puissant, thread-safe et intuitif. Dans cet article, nous allons examiner les techniques avancées de travail avec les dates et l'heure qui seront utiles à tout développeur Java.

\n\n

1. Bases de l'API java.time : LocalDate, LocalTime, LocalDateTime

\n\n

La première étape vers un travail professionnel est la compréhension des trois classes de base qui ont remplacé les anciens équivalents :

\n\n
    \n
  • LocalDate — date sans heure (année, mois, jour).
  • \n
  • LocalTime — heure sans date (heures, minutes, secondes, nanosecondes).
  • \n
  • LocalDateTime — combinaison de la date et de l'heure sans référence à un fuseau horaire.
  • \n
\n\n
// Obtention de la date et de l'heure actuelles\nLocalDate today = LocalDate.now(); // 2025-03-21\nLocalTime now = LocalTime.now(); // 14:30:15.123\nLocalDateTime current = LocalDateTime.now(); // 2025-03-21T14:30:15.123\n\n// Création d'une date spécifique\nLocalDate birthDate = LocalDate.of(1990, Month.JUNE, 15);\nLocalTime meetingTime = LocalTime.of(10, 30, 0);\n\n// Manipulations de dates\nLocalDate nextWeek = today.plusWeeks(1);\nLocalDate lastMonth = today.minusMonths(1);
\n\n

Ces classes sont immuables — toute opération renvoie un nouvel objet. Cela garantit la sécurité des threads et la prévisibilité du code.

\n\n

2. Travail avec les fuseaux horaires : ZonedDateTime et ZoneId

\n\n

Les applications globales ne peuvent pas ignorer les fuseaux horaires. Pour cela, l'API java.time propose la classe ZonedDateTime.

\n\n
// Heure actuelle en UTC\nZonedDateTime utcNow = ZonedDateTime.now(ZoneOffset.UTC);\n\n// Heure dans un fuseau horaire spécifique\nZoneId moscowZone = ZoneId.of("Europe/Moscow");\nZonedDateTime moscowTime = ZonedDateTime.now(moscowZone);\n\n// Conversion entre fuseaux\nZonedDateTime nyTime = moscowTime.withZoneSameInstant(ZoneId.of("America/New_York"));\n\n// Obtention du décalage\nZoneOffset offset = moscowTime.getOffset(); // +03:00
\n\n

Conseil de professionnel : stockez toujours les dates en UTC sur le serveur et convertissez-les dans le fuseau horaire local uniquement au niveau de la présentation (UI). Cela évitera les problèmes liés au passage à l'heure d'été/d'hiver.

\n\n

3. Analyse et formatage des dates : DateTimeFormatter

\n\n

L'une des tâches les plus courantes est la conversion d'une chaîne en date et vice versa. DateTimeFormatter offre des possibilités flexibles.

\n\n

Formatage de base

\n\n
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");\nLocalDateTime dateTime = LocalDateTime.parse("21.03.2025 14:30:00", formatter);\nString formatted = dateTime.format(formatter); // "21.03.2025 14:30:00"
\n\n

Modèles avancés

\n\n
// ISO-8601\nDateTimeFormatter isoFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;\nString isoDate = dateTime.format(isoFormatter); // "2025-03-21T14:30:00"\n\n// Formatage localisé\nDateTimeFormatter italianFormatter = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ITALY);\nString italianDate = dateTime.format(italianFormatter); // "21 marzo 2025"\n\n// Format personnalisé avec champs textuels\nDateTimeFormatter customFormatter = new DateTimeFormatterBuilder()\n    .appendValue(ChronoField.YEAR)\n    .appendLiteral(" année, ")\n    .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL)\n    .appendLiteral(" ")\n    .appendValue(ChronoField.DAY_OF_MONTH)\n    .toFormatter();\nString custom = dateTime.format(customFormatter); // "2025 année, mars 21"
\n\n

Il est important de se rappeler : DateTimeFormatter est également

Blogs

Book Recommendations