Travail avec les dates en Swift (iOS/macOS) : bibliothèques et frameworks

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

Travail avec les dates en Swift (iOS/macOS) : aperçu des bibliothèques et outils



Dans l'écosystème Apple, le travail avec les dates et l'heure est traditionnellement implémenté via le framework Foundation. Cependant, pour des scénarios complexes (analyse syntaxique de formats non standard, travail avec des dates relatives, manipulations dans différents fuseaux horaires), les développeurs se tournent souvent vers des bibliothèques tierces. Dans cet article, nous examinerons à la fois les capacités intégrées de Swift et les outils populaires pour le traitement des dates.



1. Outils intégrés de Foundation (Date, DateFormatter, Calendar)



Le type de base pour travailler avec les dates est la structure Date. Elle représente un moment absolu dans le temps (nombre de secondes depuis le 1er janvier 2001). Pour le formatage, on utilise DateFormatter, et pour les calculs calendaires — Calendar.



import Foundation

// Obtention de la date actuellelet now = Date()print("Date actuelle : \\(now)")

// Formatage de la datelet formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.timeZone = TimeZone(identifier: "Europe/Moscow")let formattedDate = formatter.string(from: now)print("Date formatée : \\(formattedDate)")

// Analyse syntaxique d'une chaîne en datelet dateString = "2025-03-15 14:30:00"if let parsedDate = formatter.date(from: dateString) { print("Date analysée : \\(parsedDate)")}

// Calculs calendaireslet calendar = Calendar.currentlet tomorrow = calendar.date(byAdding: .day, value: 1, to: now)!print("Demain : \\(tomorrow)")


2. SwiftDate — une bibliothèque puissante pour travailler avec les dates



SwiftDate est la bibliothèque tierce la plus populaire pour Swift. Elle étend les capacités de Foundation en ajoutant :

  • Une syntaxe pratique pour créer des dates (par exemple, DateInRegion)
  • Le travail avec des dates relatives ("il y a 2 heures", "dans 3 jours")
  • La prise en charge de tous les fuseaux horaires et calendriers
  • L'analyse syntaxique de chaînes dans n'importe quel format


import SwiftDate

// Création d'une date dans une régionlet region = Region(calendar: Calendars.gregorian, zone: Zones.europeMoscow, locale: Locales.russian)let date = DateInRegion("2025-03-15 14:30:00", format: "yyyy-MM-dd HH:mm:ss", region: region)!print("Date dans la région : \\(date)")

// Temps relatiflet now = DateInRegion()let twoHoursAgo = now - 2.hoursprint("Il y a 2 heures : \\(twoHoursAgo.toRelative())") // "il y a 2 heures"

// Différence entre dateslet later = now + 5.dayslet difference = later - nowprint("Différence : \\(difference.days) jours")

// Conversion vers un autre fuseau horairelet newYorkRegion = Region(zone: Zones.americaNewYork)let dateInNY = date.convert(to: newYorkRegion)print("À New York : \\(dateInNY)")


3. TimeInterval et travail avec les intervalles de temps



TimeInterval est un type de données en Swift représentant un nombre de secondes. Il est souvent utilisé pour mesurer des intervalles de temps et des délais.



import Foundation

// Création d'un intervallelet oneHour: TimeInterval = 3600let twoDays: TimeInterval = 2 * 24 * 3600

// Mesure du temps d'exécutionlet start = Date()// Simulation d'une opération longuesleep(2)let end = Date()let elapsed = end.timeIntervalSince(start)print("\\(elapsed) secondes se sont écoulées")

// Utilisation avec DispatchQueueDispatchQueue.main.asyncAfter(deadline: .now() + oneHour) { print("Une heure s'est écoulée")}


4. ISO8601DateFormatter — travail avec les formats internationaux



Pour travailler avec des dates au format ISO 8601 (souvent utilisé dans les API), Apple fournit une classe spécialisée ISO8601DateFormatter.



import Foundation

let isoFormatter = ISO8601DateFormatter()isoFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]

// Analyse syntaxique d'une chaîne ISOlet isoString = "2025-03-15T14:30:00.000Z"if let date =

Recommendations