Formation PUB910 : Applications mobiles pour Android avec Jetpack Compose, 2025 Le langage Kotlin

42.19 Les dates


Dans tout langage de programmation, la manipulation des dates pose un défi.

Ce défi n'est pas si difficile à relever, en autant que les bases soient bien comprises.

Je vous propose ici quelques techniques de manipulation de dates en Kotlin.

Dans cette fiche :

Retrouver la date courante

Il existe deux principales classes pour représenter une date en Kotlin : LocalDateTime et Date.

Objet de type LocalDateTime

Une technique largement répandue pour représenter la date courante consite à utiliser la classe LocalDateTime avec sa méthode now() :

Jetpack Compose (Kotlin)

import java.time.LocalDateTime
...
val dateActuelle = LocalDateTime.now()
Text("$dateActuelle")   // affichera la date au format 2025-08-23T09:26:46.714698

Objet de type Date

Il est encore possible de travailler avec la classe Date même si cette technique n'est plus encouragée (le code est barré pour cette raison) :

Jetpack Compose (Kotlin)

import java.util.Date
...
val dateActuelleTypeDate = Date()
Text("$dateActuelleTypeDate")   // affichera la date au format Fri Aug 23 09:26:46 EDT 2025

Représenter une date quelconque

La classe LocalDateTime, avec sa méthode parse(), permet de représenter une date donnée.

Chaîne au format ISO 8601

La chaîne qui représente la date doit être au format ISO 8601.

Kotlin

import java.time.LocalDateTime
...
val uneDate = LocalDateTime.parse("2002-07-15T13:55:00")
Text("$uneDate")   // affichera la date au format 2022-07-15T13:55

Si la chaîne représente une date sans heure, il faut plutôt utiliser LocalDate.parse() pour initialiser la date.

Jetpack Compose (Kotlin)

import java.time.LocalDate
...
val uneDate = LocalDate.parse("2002-07-15")
Text("$uneDate")   // affichera la date au format 2022-07-15

Chaîne dans un autre format

Si on souhaite fournir une chaîne qui représente la date dans un format différent, un second paramètre permet de spécifier le format de la chaîne.

Ce paramètre sera initialisé avec DateTimeFormatter.ofPattern().

Jetpack Compose (Kotlin)

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
...
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy MM dd 'à' H'h'mm")
val uneDate = LocalDateTime.parse("1999 04 18 à 8h30", dateTimeFormatter)
Text("$uneDate")   // affichera la date au format 1999-04-18T08:30

Remarquez que si la chaîne ne correspond pas au format spécifié, l'application plantera avec le message « java.time.format.DateTimeParseException: Text '...' could not be parsed ... ».

Ici aussi, si la chaîne représente une date sans heure, il faut plutôt utiliser LocalDate.parse() pour initialiser la date. Le format sera tout de même spécifié avec DateTimeFormatter.

Jetpack Compose (Kotlin)

import java.time.LocalDate
import java.time.format.DateTimeFormatter
...
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy MM dd")
val uneDate = LocalDate.parse("1999 04 18", dateTimeFormatter)
Text("$uneDate")   // affichera la date au format 1999-04-18

Changer le format d'affichage de la date

Pour avoir un meilleur contrôle sur la façon dont la date est affichée, il est possible de spécifier le format souhaité.

La technique dépendra de la façon dont la date a été créée, ce qui influence le type d'objet qui représente la date.

Objet de type LocalDateTime

Avec un objet de type LocalDateTime, il est possible de travailler avec un DateTimeFormatter.

Le plus simple consiste à utiliser un des styles prédéfinis.

Jetpack Compose (Kotlin)

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
...
val dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE
val dateActuelle = LocalDateTime.now()
Text(dateActuelle.format(dateTimeFormatter))   // affichera la date au format 2025-08-23

Il est également possible d'utiliser des styles qui tiennent compte de la localisation configurée sur le téléphone.

Jetpack Compose (Kotlin)

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
...
val dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
val dateActuelle = LocalDateTime.now()
Text(dateActuelle.format(dateTimeFormatter))   // affichera la date au format 23 août 2025, 09 h 26 min 46 s
                                               // ou, si le téléphone est en anglais, Aug 23, 2025, 09:26:46 AM

Toujours avec un objet de type LocalDateTime, il est possible de forcer le format à l'aide de DateTimeFormatter.ofPattern().

Cette technique est cependant à utiliser seulement pour les cas d'exception puisque la date ne répondra plus au format d'affichage configuré sur le téléphone.

Jetpack Compose (Kotlin)

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
...
val dateTimeFormatter = DateTimeFormatter.ofPattern("dd MMMM yyyy 'à' H'h'mm")
val dateActuelle = LocalDateTime.now()
Text(dateActuelle.format(dateTimeFormatter))   // affichera toujours la date au format 23 août 2025 à 9 h 26

Voici quelques autres exemples de formateurs.

Jetpack Compose (Kotlin)

val dateTimeFormatter1 = DateTimeFormatter.ISO_LOCAL_DATE   // date au format 2025-09-12
val dateTimeFormatter2 = DateTimeFormatter.ISO_TIME   // heure au format 10:56:15.862697
val dateTimeFormatter3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)   // date au format 9/12/25
val dateTimeFormatter4 = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)   // heure au format 10:56 AM
val dateTimeFormatter5 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)   // date et heure au format 19/12/25, 10:56 AM
val dateTimeFormatter6 = DateTimeFormatter.ofPattern("k:m:s - n 'nanosecondes'")  // heure au format 10:56:15 - 862697 nanosecondes

Objet de type Date

Avec un objet de type Date, on travaillera avec DateFormat.getDateInstance().

Jetpack Compose (Kotlin)

import java.util.Date
...
val dateActuelleTypeDate = Date()
Text(DateFormat.getDateInstance().format(dateActuelleTypeDate))   // affichera la date au format 23 août 2025
                                                                  // ou, si le téléphone est en anglais, Aug 23, 2025

Toujours avec un objet de type Date, il est possible de forcer le format à l'aide d'un SimpleDateFormat.

Cette technique est cependant à utiliser seulement pour les cas d'exception puisque la date ne répondra plus au format d'affichage configuré sur le téléphone.

Jetpack Compose (Kotlin)

import java.util.Date
...
val dateActuelleTypeDate = Date()
val simpleDateFormat = SimpleDateFormat("dd/M/yyyy hh:mm:ss")
Text(simpleDateFormat.format(dateActuelleTypeDate))   // affichera toujours la date au format 23/8/2025 09:26:46

Soustraire des dates

Il est possible de déterminer l'écart entre deux dates afin de calculer un délai.

Objets de type LocalDateTime

La classe Duration permet d'instancier un objet qui représente le temps écoulé entre deux dates.

À partir d'un objet Duration, on pourra spécifier dans quelle unité on désire travailler.

Jetpack Compose (Kotlin)

val duree = Duration.between(date1, date2)
val heures = duree.toHours()
val millisecondes = duree.toMillis()

L'énumération ChronoUnit, quant à elle, permet de spécifier directement dans quelle unité la différence doit être calculée.

Jetpack Compose (Kotlin)

val days = ChronoUnit.MILLIS.between(date1, date2)
val millisecondes = ChronoUnit.MILLIS.between(date1, date2)

Objets de type Date

Quand on a en main des dates de type Date, voici comment calculer la différence.

Jetpack Compose (Kotlin)

val difference = date2.time - date1.time
val jours = TimeUnit.MILLISECONDS.toDays(difference)
val secondes = TimeUnit.MILLISECONDS.toSeconds(difference)

Pour plus d'information

« Get the Current Date/Time in Kotlin ». Baeldung. https://www.baeldung.com/kotlin/current-date-time

« Mastering Date and Time Handling in Kotlin for Android Developers ». BugFender. https://bugfender.com/blog/kotlin-dates/

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre