Travailler avec les dates et l'heure en Kotlin : guide complet

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

Introduction

La gestion des dates et des heures est l'une des tâches les plus courantes dans le développement moderne. Qu'il s'agisse de journalisation d'événements, de calcul de délais, d'affichage de calendrier ou d'internationalisation d'application, le développeur Kotlin doit savoir traiter correctement les données temporelles. Dans cet article, nous allons détailler comment travailler avec les dates et les heures en Kotlin, en utilisant l'API moderne java.time, disponible depuis Java 8 et entièrement compatible avec Kotlin. Vous découvrirez les classes clés, le formatage, l'analyse, la gestion des fuseaux horaires et des exemples pratiques qui vous aideront à écrire un code propre et fiable.

Classes principales pour travailler avec les dates et les heures

En Kotlin, comme en Java, le travail principal avec les dates et les heures repose sur le package java.time. Ce package a été créé pour remplacer les obsolètes java.util.Date et java.util.Calendar. Il propose des classes immuables et thread-safe. Examinons les plus importantes.

LocalDate — date sans heure

La classe LocalDate représente une date (année, mois, jour) sans tenir compte de l'heure ni du fuseau horaire. Idéale pour les anniversaires, les jours fériés ou les dates d'événements.

import java.time.LocalDate

fun main() {
    // Date actuelle
    val today: LocalDate = LocalDate.now()
    println("Aujourd'hui: $today") // Affichage : 2025-04-11

    // Date spécifique
    val specificDate: LocalDate = LocalDate.of(2025, 12, 25)
    println("Noël: $specificDate")

    // Ajout de jours
    val nextWeek: LocalDate = today.plusDays(7)
    println("Dans une semaine: $nextWeek")
}

LocalTime — heure sans date

Si vous avez besoin uniquement de l'heure (heures, minutes, secondes, nanosecondes), utilisez LocalTime.

import java.time.LocalTime

fun main() {
    val now: LocalTime = LocalTime.now()
    println("Heure actuelle: $now")

    val meetingTime: LocalTime = LocalTime.of(14, 30)
    println("Réunion à: $meetingTime")

    val oneHourLater: LocalTime = now.plusHours(1)
    println("Dans une heure: $oneHourLater")
}

LocalDateTime — date et heure ensemble

C'est une combinaison de LocalDate et LocalTime. La classe la plus populaire pour stocker un instant sans lien avec un fuseau horaire.

import java.time.LocalDateTime

fun main() {
    val currentDateTime: LocalDateTime = LocalDateTime.now()
    println("Maintenant: $currentDateTime")

    val newYear: LocalDateTime = LocalDateTime.of(2026, 1, 1, 0, 0)
    println("Nouvel an: $newYear")
}

ZonedDateTime et Instant — travail avec les fuseaux horaires

ZonedDateTime ajoute à LocalDateTime des informations sur le fuseau horaire (ZoneId). Instant représente un instant en UTC (temps machine).

import java.time.ZonedDateTime
import java.time.ZoneId
import java.time.Instant

fun main() {
    // Heure dans un fuseau horaire spécifique
    val moscowTime: ZonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow"))
    println("Heure à Moscou: $moscowTime")

    // Instant actuel en UTC
    val instant: Instant = Instant.now()
    println("Horodatage UTC: $instant")
}

Formatage et analyse des dates

Pour convertir une date en chaîne (formatage) et une chaîne en date (analyse), on utilise la classe DateTimeFormatter. Elle permet de définir n'importe quel modèle.

Formatage d'une date en chaîne

import java.time.LocalDate
import java.time.format.DateTimeFormatter

fun main() {
    val date = LocalDate.now()
    val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy")
    val formattedDate: String = date.format(formatter)
    println("Date formatée: $formattedDate") // Affichage : 11.04.2025

    // Autres exemples de modèles
    val formatter2 = DateTimeFormat                

Blogs

Book Recommendations