Introduction au travail avec les dates et l'heure en Kotlin
Travailler avec les dates et l'heure est l'une des tâches clés dans le développement de toute application. Qu'il s'agisse de journalisation d'événements, de calcul de délais, d'affichage de calendrier ou de travail avec des horodatages — un outillage fiable est indispensable. Dans l'écosystème Kotlin, la puissante bibliothèque java.time est utilisée à ces fins, remplaçant les obsolètes java.util.Date et java.util.Calendar. Grâce à une compatibilité totale avec Java, Kotlin permet d'utiliser directement toutes les fonctionnalités de java.time, tout en ajoutant des extensions pratiques et du sucre syntaxique.
Dans cet article, nous allons détailler comment créer, formater, analyser et convertir des dates et l'heure en Kotlin. Vous découvrirez les classes clés telles que LocalDate, LocalTime, LocalDateTime, ZonedDateTime et Instant, et apprendrez à travailler avec des périodes et des durées. Tous les exemples de code sont écrits en Kotlin pur et prêts à être utilisés.
Classes principales pour travailler avec les dates et l'heure
La bibliothèque java.time propose plusieurs classes clés, chacune répondant à un besoin spécifique. Examinons-les en détail.
LocalDate — travailler avec une 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 événements calendaires et les tâches où l'heure n'a pas d'importance.
import java.time.LocalDate
fun main() { // Date actuelle val today = LocalDate.now() println("Aujourd'hui : $today")
// Date spécifique val specificDate = LocalDate.of(2024, 12, 25) println("Noël : $specificDate")
// Analyse à partir d'une chaîne val parsedDate = LocalDate.parse("2024-12-25") println("Analysé : $parsedDate")}LocalTime — travailler avec l'heure sans date
LocalTime stocke uniquement l'heure (heures, minutes, secondes, nanosecondes). Utilisé pour les horaires, les minuteries et les horodatages sans lien avec une date.
import java.time.LocalTime
fun main() { // Heure actuelle val now = LocalTime.now() println("Maintenant : $now")
// Heure spécifique val lunchTime = LocalTime.of(13, 30) println("Déjeuner à : $lunchTime")
// Analyse val parsedTime = LocalTime.parse("15:45:30") println("Analysé : $parsedTime")}LocalDateTime — combinaison de date et d'heure
LocalDateTime combine LocalDate et LocalTime. C'est la classe la plus couramment utilisée pour stocker un instant sans tenir compte du fuseau horaire.
import java.time.LocalDateTimeimport java.time.LocalDateimport java.time.LocalTime
fun main() { // Instant actuel val now = LocalDateTime.now() println("Maintenant : $now")
// À partir de composants séparés val date = LocalDate.of(2024, 12, 25) val time = LocalTime.of(10, 0) val christmasMorning = LocalDateTime.of(date, time) println("Matin de Noël : $christmasMorning")
// Méthode combinée val newYear = LocalDateTime.of(2025, 1, 1, 0, 0) println("Nouvel An : $newYear")}Formatage et analyse des dates
Pour convertir des dates en chaînes et vice versa, la classe DateTimeFormatter est utilisée. Elle prend en charge de nombreux formats prédéfinis et permet également de créer des modèles personnalisés.
Formatage d'une date en chaîne
import java.time.LocalDateTimeimport java.time.format.DateTimeFormatter
fun main() { val now = LocalDateTime.now()
// Format ISO standard val isoFormat = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) println("ISO : $isoFormat")
// Format personnalisé val customFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss") va