Travail avec les dates en Swift (iOS/macOS) : aperçu des bibliothèques
Le travail avec les dates et l'heure est l'une des tâches les plus fréquentes et en même temps les plus complexes dans le développement sous iOS et macOS. Le framework standard Foundation fournit des outils puissants, mais pas toujours intuitifs : Date, DateFormatter, Calendar, TimeInterval. Cependant, pour simplifier les opérations courantes (analyse de chaînes, intervalles lisibles, localisation), il existe des bibliothèques spécialisées. Dans cet article, nous examinerons les approches principales et les outils populaires.
1. Outils intégrés de Foundation
Avant d'ajouter des solutions tierces, il est important de savoir travailler avec les outils natifs. Les classes principales :
Date— un point dans le temps (à la seconde près).DateFormatter— conversion d'une chaîne en date et vice versa.Calendar— travail avec les unités calendaires (année, mois, jour).TimeInterval— différence entre les dates en secondes.
Exemple : formatage d'une date
import Foundation
let now = Date()let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.locale = Locale(identifier: "ru_RU")let dateString = formatter.string(from: now)print(dateString) // 2025-02-18 14:30:00Exemple : calcul de la différence en jours
let calendar = Calendar.currentlet start = Date()let end = calendar.date(byAdding: .day, value: 7, to: start)!let components = calendar.dateComponents([.day], from: start, to: end)print(components.day!) // 7Ces fonctionnalités sont suffisantes pour la plupart des scénarios de base. Mais dès qu'une analyse complexe ou une localisation est nécessaire, le code devient lourd.
2. Bibliothèque DateHelper
DateHelper est une bibliothèque légère (disponible via Swift Package Manager) qui ajoute des extensions pratiques à Date. La principale caractéristique est les dates relatives lisibles.
Installation : dans Package.swift, ajoutez la dépendance https://github.com/melvitax/DateHelper.
Exemple : « il y a 3 heures »
import DateHelper
let pastDate = Date() - 3.hoursprint(pastDate.toRelativeString()) // "3 hours ago"// Avec localisation : print(pastDate.toRelativeString(locale: "fr"))La bibliothèque prend en charge de nombreux formats de sortie : .short, .medium, .full. C'est une option idéale pour les applications où il faut afficher « à l'instant », « hier », « il y a 2 semaines » sans écrire son propre analyseur.
3. SwiftDate — l'outil le plus puissant
SwiftDate (auteur : Daniele Margutti) est pratiquement le standard de facto pour le travail avec les dates en Swift. Il comprend :
- Analyse de chaînes avec détection automatique du format.
- Manipulations de dates (ajout/soustraction de composants).
- Calcul de la différence dans toutes les unités.
- Localisation (prise en charge de 30+ langues).
- Travail avec les fuseaux horaires et les calendriers.
Installation : via SPM ou CocoaPods.
Exemple : analyse d'une chaîne avec un format inconnu
import SwiftDate
let dateString = "2025-02-18T14:30:00+03:00"if let date = dateString.toDate() { print(date.year) // 2025 print(date.month) // 2 print(date.toFormat("dd MMMM yyyy", locale: Locales.russian)) // "18 февраля 2025"}Exemple : obtention d'un intervalle sous forme lisible
let start = DateInRegion(Date())let end = start + 2.hours + 30.minuteslet interval = start.toRelativeString(end, style: RelativeFormatter.defaultStyle())print(interval) // "2 hours 30 minutes later"SwiftDate sait également travailler avec les