Travail avec les dates et l'heure en Kotlin : techniques 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 Kotlin



Dans le développement moderne avec Kotlin, le travail avec les dates et l'heure va bien au-delà de l'affichage simple de la date actuelle. À un niveau avancé, il est nécessaire de prendre en compte les fuseaux horaires, d'effectuer des calculs complexes avec des périodes, d'analyser des formats non standard et de traiter des horodatages dans des systèmes distribués. Dans cet article, nous examinerons les bibliothèques et techniques clés qui vous aideront à écrire un code fiable et efficace pour travailler avec les dates et l'heure en Kotlin.



1. Choix de la bibliothèque : java.time vs kotlinx-datetime



Kotlin est entièrement compatible avec Java, vous pouvez donc utiliser la puissante API java.time (JSR-310), qui est la norme pour les nouveaux projets. Cependant, pour les projets multiplateformes (KMP), il est préférable de choisir kotlinx-datetime de JetBrains.



java.time (JVM)

Classes principales : LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant, Duration, Period.



import java.time.*

fun main() { val today = LocalDate.now() val meetingTime = LocalDateTime.of(2025, 3, 15, 14, 30) val zonedMeeting = ZonedDateTime.of(meetingTime, ZoneId.of("Europe/Moscow")) println("Réunion à Moscou : $zonedMeeting")}


kotlinx-datetime (Multiplateforme)

Ajoutez la dépendance dans build.gradle.kts :

implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")


import kotlinx.datetime.*

fun main() { val now = Clock.System.now() val date = now.toLocalDateTime(TimeZone.of("Europe/Moscow")).date println("Aujourd'hui : $date")}


2. Analyse et formatage des dates



Une analyse correcte est la base du travail avec des données externes. Examinons des techniques avancées.



Analyse avec des formats non standard



import java.time.LocalDateTimeimport java.time.format.DateTimeFormatterimport java.time.format.DateTimeParseException

fun parseCustomDate(dateString: String): LocalDateTime? { val formatters = listOf( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"), DateTimeFormatter.ofPattern("dd/MM/yyyy'T'HH:mm"), DateTimeFormatter.ISO_LOCAL_DATE_TIME ) for (formatter in formatters) { try { return LocalDateTime.parse(dateString, formatter) } catch (e: DateTimeParseException) { // essayer le suivant } } return null}

fun main() { println(parseCustomDate("2025-03-15 14:30:00")) // 2025-03-15T14:30 println(parseCustomDate("15/03/2025T14:30")) // 2025-03-15T14:30}


Formatage localisé



import java.time.LocalDateimport java.time.format.DateTimeFormatterimport java.time.format.FormatStyleimport java.util.Locale

fun main() { val date = LocalDate.of(2025, 3, 15) val usFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withLocale(Locale.US) val ruFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withLocale(Locale("ru")) println("USA : ${date.format(usFormatter)}") // Saturday, March 15, 2025 println("RU : ${date.format(ruFormatter)}") // суббота, 15 марта 2025 г.}


3. Calculs complexes avec Duration et Period



Duration — pour les intervalles de temps précis (heures, minutes, secondes), Period — pour les périodes calendaires (années, mois, jours).



Différence entre dates avec prise en compte de la logique métier



import java.time.*import java.time.temporal.ChronoUnit

fun businessDaysBetween(start: LocalDate, end: LocalDate): Long { var count = 0L var current = start while (current.isBefore(end)) { if (current.dayOfWeek != DayOfWeek.SATURDAY && current.dayOfWeek != DayOfWe

Blogs

Book Recommendations