Trabajo con fechas en Swift: Foundation, SwiftDate, DateTools (iOS/macOS)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas en Swift (iOS/macOS): revisión de bibliotecas



En el desarrollo para iOS y macOS, trabajar con fechas y horas es una de las tareas clave. El framework estándar Foundation proporciona herramientas potentes, pero a veces engorrosas. Para simplificar el código y mejorar la legibilidad, los desarrolladores suelen utilizar bibliotecas de terceros. En este artículo, revisaremos las capacidades nativas de Swift (Foundation) y dos bibliotecas populares: SwiftDate y DateTools.



1. Foundation: capacidades integradas



El conjunto de herramientas básicas de Foundation incluye Date, DateFormatter, Calendar y TimeZone. Esto es suficiente para la mayoría de las tareas, pero requiere código verboso.



Ejemplo: creación y formateo de fechas

import Foundation

let now = Date()let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.timeZone = TimeZone(abbreviation: "UTC")let dateString = formatter.string(from: now)print(dateString) // 2025-04-01 14:30:00


Ejemplo: cálculo de la diferencia entre fechas

let startDate = Date()let endDate = Calendar.current.date(byAdding: .day, value: 7, to: startDate)!let components = Calendar.current.dateComponents([.day, .hour], from: startDate, to: endDate)print("\\(components.day!) días, \\(components.hour!) horas")


Ventajas de Foundation: sin dependencias, control total, soporte para todas las zonas horarias y calendarios.
Desventajas: mucho código para operaciones simples, complejidad con la localización y fechas relativas.



2. SwiftDate — biblioteca potente y flexible



SwiftDate es una de las bibliotecas más populares para trabajar con fechas en Swift. Extiende las capacidades de Foundation, añadiendo métodos convenientes para análisis, formateo, manipulaciones y trabajo con zonas horarias.



Instalación (Swift Package Manager)

// Package.swiftdependencies: [    .package(url: "https://github.com/malcommac/SwiftDate.git", from: "6.3.0")]


Ejemplo: creación de una fecha a partir de una cadena

import SwiftDate

let date = "2025-04-01T14:30:00+0000".toDate()print(date?.toFormat("dd.MM.yyyy HH:mm")) // 01.04.2025 14:30


Ejemplo: fechas relativas e intervalos

let now = Date()let oneWeekAgo = now - 1.weeksprint(oneWeekAgo.toRelative()) // "1 week ago"

let nextMonth = now + 1.monthsprint(nextMonth.toFormat("MMMM yyyy")) // May 2025


Ejemplo: trabajo con zonas horarias

let parisDate = DateInRegion(Date(), region: .init(calendar: Calendars.gregorian, zone: Zones.europeParis, locale: Locales.french))print(parisDate.toFormat("HH:mm")) // hora en París


Ventajas de SwiftDate: sintaxis concisa, soporte integrado para fechas relativas, regiones y locales, análisis potente.
Desventajas: gran tamaño de la biblioteca (~2 MB), puede ser excesiva para proyectos simples.



3. DateTools — simplicidad y legibilidad



DateTools es una biblioteca ligera, orientada a la facilidad de lectura del código. Añade métodos a Date para el cálculo rápido de intervalos, comparación y formateo.



Instalación (CocoaPods)

pod 'DateToolsSwift'


Ejemplo: verificación de intervalos de tiempo

import DateToolsSwift

let date1 = Date()let date2 = date1 + 2.hoursprint(date2.isToday) // trueprint(date1.earlierDate(date2) == date1) // true


Ejemplo: cadenas legibles para humanos

let pastDate = Date() - 3.daysprint(pastDate.timeAgoSinceNow) // "3 days ago"

let futureDate = Date() + 1.weeksprint(futureDate.timeAgoSinceNow) // "in 1 w

Recommendations