Travailler avec les dates et l'heure en Swift : de A à Z

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

Introduction à la gestion des dates et de l'heure en Swift

\n

La gestion des dates et de l'heure est l'une des tâches clés lors du développement d'applications pour iOS et macOS. De l'affichage simple de la date actuelle aux calculs complexes d'intervalles de temps et à la gestion des fuseaux horaires, Swift offre une boîte à outils puissante et flexible. Dans cet article, nous allons passer en revue les principales classes et structures : Date, DateFormatter, Calendar, DateComponents et TimeInterval. Vous apprendrez à créer, formater, comparer et manipuler les dates en pratique.

\n\n

Classes et structures principales

\n

En Swift, plusieurs types fondamentaux sont utilisés pour travailler avec les dates. Examinons chacun d'eux.

\n
    \n
  • Date — une structure représentant un moment précis dans le temps. Elle ne dépend ni du calendrier ni du fuseau horaire.
  • \n
  • DateFormatter — une classe pour convertir une date en chaîne de caractères et vice versa.
  • \n
  • Calendar — une structure décrivant un calendrier (grégorien, bouddhiste, etc.) et fournissant des méthodes pour travailler avec les composants de la date.
  • \n
  • DateComponents — une structure pour stocker des composants individuels de la date (année, mois, jour, heure, minute, etc.).
  • \n
  • TimeInterval — un type (Double) représentant un nombre de secondes.
  • \n
\n\n

Travailler avec Date et DateFormatter

\n

Commençons par le plus simple : obtenir la date actuelle et l'afficher à l'utilisateur.

\n\n

Obtenir la date actuelle

\n
import Foundation\n\nlet currentDate = Date()\nprint("Date et heure actuelles : \\(currentDate)")\n// Affichage : Date et heure actuelles : 2025-04-05 12:30:00 +0000
\n\n

Formatage de la date

\n

Pour que la date soit présentée de manière familière, utilisons DateFormatter :

\n
let formatter = DateFormatter()\nformatter.dateFormat = "dd.MM.yyyy HH:mm"\nlet dateString = formatter.string(from: currentDate)\nprint("Date formatée : \\(dateString)")\n// Affichage : Date formatée : 05.04.2025 12:30
\n\n

Analyse d'une chaîne en date

\n
let dateString = "2025-04-05 14:00"\nformatter.dateFormat = "yyyy-MM-dd HH:mm"\nif let parsedDate = formatter.date(from: dateString) {\n    print("Date analysée : \\(parsedDate)")\n} else {\n    print("Erreur d'analyse")\n}
\n

Important : vérifiez toujours que date(from:) ne retourne pas nil, sinon l'application pourrait planter.

\n\n

Manipulations de dates avec Calendar et DateComponents

\n

Il est souvent nécessaire d'ajouter des jours, des mois ou de calculer la différence entre des dates. C'est là que Calendar vient à la rescousse.

\n\n

Ajout et soustraction de temps

\n
let calendar = Calendar.current\nlet oneWeekLater = calendar.date(byAdding: .day, value: 7, to: currentDate)!\nlet oneMonthAgo = calendar.date(byAdding: .month, value: -1, to: currentDate)!\n\nprint("Dans une semaine : \\(formatter.string(from: oneWeekLater))")\nprint("Il y a un mois : \\(formatter.string(from: oneMonthAgo))")
\n\n

Extraction des composants de la date

\n
let components = calendar.dateComponents([.year, .month, .day, .hour], from: currentDate)\nif let year = components.year, let month = components.month {\n    print("Aujourd'hui : \\(year)-\\(month)")\n}
\n\n

Création d'une date à partir de composants

\n
var newComponents = DateComponents()\nnewComponents.year = 2025\nnewComponents.month = 12\nnewComponents.day = 25\nnewComponents.hour = 10\nnewComponents.minute = 0\n\nif let christmas = calendar.date(from: newComponents) {\n    print("Noël : \\(formatter.string(from: christmas))")\n}
\n\n

Comparaison de dates et travail avec TimeInterval

\n

Swift permet de comparer facilement les dates et de calculer les intervalles de temps.

\n\n

Comparaison de dates

\n
let now = Date()\nlet futureDate = calendar.date(byAdding: .day, value: 10, to: now)!\n\nif futureDate > now {\n    print("                

Blogs

Book Recommendations