Introduction à la gestion des dates et de l'heure en Swift
\nLa 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.
Classes et structures principales
\nEn 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
Travailler avec Date et DateFormatter
\nCommençons par le plus simple : obtenir la date actuelle et l'afficher à l'utilisateur.
\n\nObtenir la date actuelle
\nimport 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\nFormatage de la date
\nPour que la date soit présentée de manière familière, utilisons DateFormatter :
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\nAnalyse d'une chaîne en date
\nlet 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}\nImportant : vérifiez toujours que date(from:) ne retourne pas nil, sinon l'application pourrait planter.
Manipulations de dates avec Calendar et DateComponents
\nIl 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.
Ajout et soustraction de temps
\nlet 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\nExtraction des composants de la date
\nlet 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\nCréation d'une date à partir de composants
\nvar 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\nComparaison de dates et travail avec TimeInterval
\nSwift permet de comparer facilement les dates et de calculer les intervalles de temps.
\n\nComparaison de dates
\nlet now = Date()\nlet futureDate = calendar.date(byAdding: .day, value: 10, to: now)!\n\nif futureDate > now {\n print("