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 :
Il existe deux principales classes pour représenter une date en Kotlin : LocalDateTime et Date.
Une technique largement répandue pour représenter la date courante consite à utiliser la classe LocalDateTime avec sa méthode now() :
import java.time.LocalDateTime
...
val dateActuelle = LocalDateTime.now()
Text("$dateActuelle") // affichera la date au format 2025-08-23T09:26:46.714698
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) :
La classe LocalDateTime, avec sa méthode parse(), permet de représenter une date donnée.
La chaîne qui représente la date doit être au format ISO 8601.
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.
import java.time.LocalDate
...
val uneDate = LocalDate.parse("2002-07-15")
Text("$uneDate") // affichera la date au format 2022-07-15
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().
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.
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
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.
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.
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.
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.
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.
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
Avec un objet de type Date, on travaillera avec DateFormat.getDateInstance().
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.
Il est possible de déterminer l'écart entre deux dates afin de calculer un délai.
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.
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.
val days = ChronoUnit.MILLIS.between(date1, date2)
val millisecondes = ChronoUnit.MILLIS.between(date1, date2)
Quand on a en main des dates de type Date, voici comment calculer la différence.
« 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é