Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Les dates

64.3 Convertir une date en chaîne


Il existe de nombreuses techniques pour convertir une date en chaîne.

Peu importe la technique utilisée, il faut se rappeler qu'une date est sujette aux configurations régionales ainsi qu'à la langue. L'apparence de la date dépendra donc des configurations de l'appareil ou du simulateur (Réglages / Général / Langue et région).

Voici deux exemples de configurations que l'on pourrait retrouver sur un téléphone.

fr_CA en_US

Interpolation de chaîne

L'interpolation de chaîne permet de convertir à peu près n'importe quel type de donnée en chaîne de caractère.

Par contre, nous n'avons aucun contrôle sur la façon dont les informations seront converties.

SwiftUI

Text("\(Date.now)")

En français, la date sera au format : jeudi 11 avril 2024 à 15:28:10 heure avancée de l'Est

En anglais, on verra plutôt : Thursday, April 11, 2024 at 3:28:10 PM Eastern Daylight Saving Time

Text avec style

La vue Text attend normalement un paramètre de type chaîne.

Il est également possible de lui passer un premier paramètre de type Date suivi du paramètre style pour préciser comment afficher cette date.

SwiftUI

Text(Date.now, style: .date)

En français : 11 avril 2024

En anglais : April 11, 2024

.formatted() 

La méthode .formatted() permet de préciser le format d'affichage d'une date.

Il existe un format par défaut. Il est également possible de lui passer des paramètres afin de préciser le format.

SwiftUI

struct ContentView: View {
  var dateTransaction = Date.now.formatted()

  var body: some View {
    Text(dateTransaction)
  }
}

En français : 2024-04-11 15:28

En anglais : 2024/4/11, 3:28 PM

Voici un autre exemple. Cette fois, des paramètres ont été ajoutés pour préciser le format.

SwiftUI

struct ContentView: View {
  var dateTransaction = Date.now.formatted(date: .abbreviated, time: .shortened)

  var body: some View {
    Text(dateTransaction)
  }
}

En français : 11 avr. 2024 à 15:28

En anglais : Apr 11, 2024 at 3:28 PM

Voici quelques exemples des formats possibles.

date time français anglais
.abbreviated .shortened 11 avr. 2024 à 15:28 Apr 11, 2024 at 3:28 PM
.long .standard 11 avril 2024 à 15:28:10 April 11, 2024 at 3:28:10 PM
.complete .complete jeudi 11 avril 2024 à 15:28:10 HAE Thursday, April 11, 2024 at 3:28:10 PM EDT
.numeric .omitted 2024-04-11 2024/4/11
.omitted .standard 15:28:10 3:28:10 PM

DateFormatter()

Pour avoir un maximum de contrôle sur le format de la date, il est possible de travailler avec un DateFormatter().

La syntaxe est très semblable à celle utilisée pour instancier une date. La seule différence est l'utilisation de la méthode string().

Swift

struct ContentView: View {
  var dateTransaction: String

  init() {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

    dateTransaction = dateFormatter.string(from: Date.now)
  }

  var body: some View {
    Text(dateTransaction)
  }
}

Dans cet exemple, le résultat sera toujours au même format puisqu'aucun mot n'est présent.

La date apparaîtra au format : 2024-04-11 15:28:10

Attention : il aurait été possible de demander le mois en toutes lettres en changeant le format comme ceci :

SwiftUI

dateFormatter.dateFormat = "dd MMMM yyyy"

Sans précautions supplémentaires, on obtiendrait :

En français : 11 avril 2024

En anglais : 11 April 2024   Ouch!

Bien qu'il soit possible de remédier à ce problème, il est préférable d'utiliser une des techniques présentées plus haut pour que la date respecte le format de localisation.

Pour plus d'information

« Preparing dates, currencies, and numbers for translation ». Apple. https://developer.apple.com/documentation/xcode/preparing-dates-numbers-with-formatters

▼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