Introducción al trabajo con fechas y horas en Swift
Trabajar con fechas y horas es una de las tareas clave en el desarrollo de aplicaciones para iOS y macOS. Ya sea para mostrar la fecha actual, calcular la diferencia entre eventos o planificar notificaciones, Swift proporciona un conjunto de herramientas potente y flexible para estos fines. En este artículo, analizaremos las clases y métodos principales: Date, DateFormatter, Calendar, DateComponents y TimeInterval. Aprenderás a crear, formatear, comparar y manipular fechas en Swift.
El material será útil tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos. Todos los ejemplos de código se pueden usar directamente en tus proyectos.
Clases principales para trabajar con fechas
Clase Date
Date es un tipo fundamental que representa un momento específico en el tiempo, independientemente de la zona horaria o el calendario. Almacena la cantidad de segundos transcurridos desde el 1 de enero de 2001 (época de Cocoa).
import Foundation
// Fecha y hora actuallet now = Date()print("Ahora: \\(now)")
// Fecha dentro de 1 horalet oneHourLater = Date(timeIntervalSinceNow: 3600)print("En una hora: \\(oneHourLater)")
// Fecha a partir de una cantidad dada de segundos desde la épocalet epochDate = Date(timeIntervalSinceReferenceDate: 0)print("Época de Cocoa: \\(epochDate)")TimeInterval
TimeInterval es simplemente un alias para Double que representa una cantidad de segundos. Se utiliza para definir intervalos de tiempo.
let interval: TimeInterval = 86400 // 24 horas en segundoslet tomorrow = Date(timeIntervalSinceNow: interval)print("Mañana: \\(tomorrow)")DateFormatter
DateFormatter se encarga de convertir una fecha en una cadena de texto y viceversa. Es una de las clases más utilizadas.
let formatter = DateFormatter()formatter.dateStyle = .longformatter.timeStyle = .short
let currentDate = Date()let dateString = formatter.string(from: currentDate)print("Fecha formateada: \\(dateString)")
// Conversión inversalet dateFromString = formatter.date(from: "15 de abril de 2025, 14:30")print("Fecha desde cadena: \\(dateFromString ?? Date())")Puedes definir un formato personalizado usando dateFormat:
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"let customString = formatter.string(from: Date())print("Formato personalizado: \\(customString)")Calendario y componentes de fecha
Calendar
Calendar permite trabajar con fechas en el contexto de un calendario específico (gregoriano, islámico, etc.) y una zona horaria.
let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: Date())print("Año: \\(components.year!), Mes: \\(components.month!), Día: \\(components.day!)")DateComponents
DateComponents es una estructura que contiene componentes individuales de una fecha (año, mes, día, hora, etc.). Se utiliza para crear nuevas fechas o extraer partes de las existentes.
// Crear una fecha a partir de componentesvar birthdayComponents = DateComponents()birthdayComponents.year = 1990birthdayComponents.month = 6birthdayComponents.day = 15birthdayComponents.hour = 10
if let birthday = calendar.date(from: birthdayComponents) { print("Cumpleaños: \\(birthday)")}
// Añadir días a una fechaif let nextWeek = calendar.date(byAdding: .day, value: 7, to: Date()) { print("En una semana: \\(nextWeek)")}Los componentes se pueden usar para verificar propiedades de la fecha:
let isToday = calendar.isDateInToday(Date())print("¿Es hoy? \\(isToday)")
let isWeekend = calendar.isDateInWeekend(Date())print("¿Es fin de semana? \\(isWeekend)")