Revenir

Entre ton email pour recevoir le guide complet pour apprendre Swift peu importe ton niveau

Tout ce qu'il faut savoir sur les Dates en Swift

Récemment j’ai commencé à travailler en tant que freelance et l’application que je créais nécessitait beaucoup de travail avec les dates.

J’ai fait beaucoup de recherches et j’ai décidé de tout rassembler pour que vous puissiez avoir tout ce dont vous avez besoin ici.

Il y a 3 cours principaux pour traiter des dates : Date, DateComponents, DateFormatter et Calendar.

Le type de date

Cette classe ne représente qu’une date. Vous ne pouvez pas faire beaucoup de choses avec elle car elle ne représente qu’une seule date.

Voici ce que dit la documentation à ce sujet :

Une date précise, indépendante de tout calendrier ou fuseau horaire.

Ceci résume parfaitement ce qu’est le type de date.

Ce type est la base de tous les autres types que j’ai mentionnés précédemment. Voici comment obtenir la date actuelle :

let now = Date()
print(now) // 2019-11-17 09:51:51:05 +000000

Par défaut, il utilise le fuseau horaire GMT+0.

Ce type permet également des comparaisons avec les opérateurs (<, ==) et avec la méthode de comparaison.

Les dates peuvent aussi être utilisées pour créer un TimeInterval principalement avec la méthode timeIntervalSince(_ :).

Un TimeInterval est un typealias pour le type Double car il représente un nombre de secondes séparant deux dates.

Pour avoir plus de contrôle sur la date, nous pouvons utiliser DateFormatter.

DateFormatter

Celui-ci est utilisé pour créer une date à partir d’une chaîne de caractères basée sur un format donné.

On peut aussi faire le contraire, c’est-à-dire convertir une date en une chaîne de caractères basée sur un format donné.

En voici un exemple :

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-HH-mm"

let dateStr = formatter.string(from: Date()) // 2019-11-19
let date = formatter.date(from: "2019-11-19") // Optional(2019-11-19 00:00:00 +0000)

Vous pouvez également définir la Locale (par exemple US-us pour la date américaine ou FR-fr pour le français) et le TimeZone du DateFormatter.

Si vous voulez voir tous les formats disponibles pour un DateFormatter vous pouvez aller sur nsdateformatter.com.

DateComponent

Cette classe représente une date basée sur ses composants, ce qui signifie que vous pouvez utiliser les parties des dates dont vous avez besoin.

Par exemple, si vous avez seulement besoin de manipuler l’heure ou les minutes d’une date, vous pouvez utiliser DateComponents. En voici un exemple :

var comps = DateComponents()
comps.day = 17
comps.month = 11
comps.year = 2019
comps.hour = 11
comps.minute = 27

print(comps.date!) // Optional(2019-11-17 11:27:00 +0000)

Les composants d’une date sont représentés sous forme d’entiers optionnels, ce qui signifie qu’elle supporte les additions, les soustractions…

Calendar

Cette classe est la classe qui manipule toutes les autres.

En utilisant Calendrier, vous pouvez travailler avec des dates basées sur un calendrier (rappelez-vous la définition de Date dans la documentation qui dit qu’elle est indépendante d’un calendrier).

La première conséquence de cela est que vous pouvez créer des Date Objects basés sur DateCompenents ou vous pouvez aussi faire le contraire et bien d’autres choses :

var comps = DateComponents()
comps.day = 17
comps.month = 11
comps.year = 2019
comps.hour = 11
comps.minute = 27

let cal = Calendar.current

let date = cal.date(from: comps) // components to date
let comps2 = cal.dateComponents([.hour, .minute], from: Date()) // pour obtenir certains components d'une date
let weekday = cal.dateComponents(.weekday, from: date!, from: Date()) // pour obtenir un componenet spécifique

La deuxième conséquence de l’utilisation de dates avec des calendriers est que vous pouvez effectuer des opérations sur des dates comme ajouter 2 jours à une date ou obtenir la différence en heures entre deux dates :

var comps = DateComponents()
comps.day = 17
comps.month = 11
comps.year = 2019
comps.hour = 11
comps.minute = 27

let cal = Calendar.current

let nextWeek = cal.date(byAdding: .day, value: 7, to: Date())

let date = cal.date(from: comps)
let interval = cal.dateComponents([.hour, .minute], from: date!, to: Date()) // retourne la différence en heures et minutes entre les 2 dates dans un DateComponent

Conclusion

Il y a beaucoup plus à dire sur les dates dans Swift mais ce que j’ai couvert ici sont les bases dont vous aurez besoin tout au long de votre carrière en tant que développeur iOS.

Vous n’avez pas besoin de mémoriser tout ce qui se trouve dans cet article. Ceci est censé être l’article que vous vérifiez chaque fois que vous avez besoin d’un peu d’information sur les bases des dates.

Comme tout autre concept de programmation, il est important d’avoir les bases, mais il est encore plus important de savoir comment trouver l’information dont vous avez besoin quand vous en avez besoin.