Trabajo con fechas y horas en Swift: guía completa

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 y horas en Swift: desde lo básico hasta técnicas avanzadas



Trabajar con fechas y horas es una de las tareas clave en el desarrollo de aplicaciones para iOS y macOS. Swift proporciona un conjunto de herramientas potente y flexible para este propósito: Date, DateFormatter, Calendar, DateComponents y TimeInterval. En este artículo, analizaremos cada uno de ellos en detalle, mostraremos ejemplos prácticos y aprenderemos a resolver tareas típicas como formatear fechas, calcular diferencias de tiempo, trabajar con zonas horarias y calendarios.



1. Fundamentos: clase Date y TimeInterval



El tipo básico para representar un momento en el tiempo es Date. Almacena la cantidad de segundos transcurridos desde el 1 de enero de 2001 a las 00:00:00 UTC (fecha de referencia de Apple).



Creación y comparación de fechas:

import Foundation

// Fecha y hora actuallet now = Date()print("Ahora: \\(now)")

// Fecha basada en un intervalo de tiempo (120 segundos desde el momento actual)let futureDate = Date(timeIntervalSinceNow: 120)print("Dentro de 2 minutos: \\(futureDate)")

// Fecha basada en un intervalo fijo desde la fecha de referencialet specificDate = Date(timeIntervalSinceReferenceDate: 3600 * 24 * 365) // 1 año desde 2001print("Fecha aproximada: \\(specificDate)")

// Comparación de fechasif now < futureDate { print("La fecha actual es anterior a la futura")}


TimeInterval es simplemente un alias para Double que representa la cantidad de segundos. Se utiliza para calcular la diferencia entre fechas:

let startDate = Date()sleep(2) // Simulación de retardolet endDate = Date()

let elapsed: TimeInterval = endDate.timeIntervalSince(startDate)print("Han pasado \\(elapsed) segundos") // Mostrará ~2.0

// Operación inversalet minutes: TimeInterval = 5 * 60let fiveMinutesLater = Date(timeInterval: minutes, since: startDate)


2. Formateo de fechas con DateFormatter



Para mostrar la fecha al usuario de forma comprensible, se utiliza DateFormatter. Admite localización y múltiples estilos.



Formateo básico:

let formatter = DateFormatter()formatter.locale = Locale(identifier: "es_ES") // Locale españolformatter.timeZone = TimeZone.current       // Zona horaria actual

// Estilos estándarformatter.dateStyle = .fullformatter.timeStyle = .shortprint(formatter.string(from: Date())) // Por ejemplo: "viernes, 24 de febrero de 2025, 14:30"

formatter.dateStyle = .mediumformatter.timeStyle = .noneprint(formatter.string(from: Date())) // "24 feb 2025"


Formato personalizado:

formatter.dateFormat = "dd.MM.yyyy HH:mm"print(formatter.string(from: Date())) // "24.02.2025 14:30"

// Parseo de cadena a fechalet dateString = "25.12.2024 10:00"if let parsedDate = formatter.date(from: dateString) { print("Fecha parseada: \\(parsedDate)")}


Importante: Al hacer parseo, verifique siempre que date(from:) no devuelva nil. Un formato de cadena incorrecto o una falta de coincidencia con la locale provocará un error.



3. Cálculos de calendario: Calendar y DateComponents



La clase Calendar encapsula información sobre el sistema calendárico (gregoriano, islámico, budista, etc.) y permite realizar operaciones complejas con fechas. DateComponents se utiliza para describir componentes individuales de una fecha (año, mes, día, hora, etc.).



Extracción de componentes:

let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .weekday], from: Date())

print("Año: \\(components.year!)")print("Mes: \\(components.month!)")print("Día: \\(components.day!)")print("Día de la semana: \\(components.weekday!)") // 1 - domingo, 2 - lunes...

Blogs

Book Recommendations