Trabalho com datas em Swift (iOS/macOS): visão geral de bibliotecas e ferramentas
No ecossistema Apple, o trabalho com datas e horas é tradicionalmente implementado através do framework Foundation. No entanto, para cenários complexos (parsing de formatos não padronizados, trabalho com datas relativas, manipulações em diferentes fusos horários), os desenvolvedores frequentemente recorrem a bibliotecas de terceiros. Neste artigo, vamos explorar tanto os recursos nativos do Swift quanto as ferramentas populares para processamento de datas.
1. Recursos nativos do Foundation (Date, DateFormatter, Calendar)
O tipo básico para trabalhar com datas é a estrutura Date. Ela representa um momento absoluto no tempo (número de segundos desde 1º de janeiro de 2001). Para formatação, utiliza-se DateFormatter, e para cálculos de calendário, Calendar.
import Foundation
// Obtendo a data atuallet now = Date()print("Data atual: \\(now)")
// Formatando a datalet formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"formatter.timeZone = TimeZone(identifier: "Europe/Moscow")let formattedDate = formatter.string(from: now)print("Data formatada: \\(formattedDate)")
// Parsing de string para datalet dateString = "2025-03-15 14:30:00"if let parsedDate = formatter.date(from: dateString) { print("Data parseada: \\(parsedDate)")}
// Cálculos de calendáriolet calendar = Calendar.currentlet tomorrow = calendar.date(byAdding: .day, value: 1, to: now)!print("Amanhã: \\(tomorrow)")2. SwiftDate — biblioteca poderosa para trabalho com datas
SwiftDate é a biblioteca de terceiros mais popular para Swift. Ela expande os recursos do Foundation, adicionando:
- Sintaxe conveniente para criação de datas (por exemplo,
DateInRegion) - Trabalho com datas relativas ("2 horas atrás", "em 3 dias")
- Suporte a todos os fusos horários e calendários
- Parsing de strings em qualquer formato
import SwiftDate
// Criando uma data em uma regiãolet 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("Data na região: \\(date)")
// Tempo relativolet now = DateInRegion()let twoHoursAgo = now - 2.hoursprint("2 horas atrás: \\(twoHoursAgo.toRelative())") // "2 horas atrás"
// Diferença entre dataslet later = now + 5.dayslet difference = later - nowprint("Diferença: \\(difference.days) dias")
// Conversão para outro fuso horáriolet newYorkRegion = Region(zone: Zones.americaNewYork)let dateInNY = date.convert(to: newYorkRegion)print("Em Nova York: \\(dateInNY)")3. TimeInterval e trabalho com intervalos de tempo
TimeInterval é um tipo de dado em Swift que representa o número de segundos. É frequentemente usado para medir intervalos de tempo e atrasos.
import Foundation
// Criando um intervalolet oneHour: TimeInterval = 3600let twoDays: TimeInterval = 2 * 24 * 3600
// Medindo o tempo de execuçãolet start = Date()// Simulação de operação longasleep(2)let end = Date()let elapsed = end.timeIntervalSince(start)print("Passaram \\(elapsed) segundos")
// Uso com DispatchQueueDispatchQueue.main.asyncAfter(deadline: .now() + oneHour) { print("Uma hora se passou")}4. ISO8601DateFormatter — trabalho com formatos internacionais
Para trabalhar com datas no formato ISO 8601 (frequentemente usado em APIs), a Apple fornece a classe especializada ISO8601DateFormatter.
import Foundation
let isoFormatter = ISO8601DateFormatter()isoFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
// Parsing de string ISOlet isoString = "2025-03-15T14:30:00.000Z"if let date = Também na biblioteca
Filas de tarefas em TypeScript: visão geral de bibliotecas e implementação
Trabalhando com arquivos ZIP em TypeScript: guia completo sobre JSZip e adm-zip
Monitoramento de aplicações PHP: ferramentas e bibliotecas para rastrear desempenho
Geração de relatórios PDF em JavaScript (Node.js): Visão geral das bibliotecas e exemplos de código
Geolocalização e mapas em Go: visão geral de bibliotecas e exemplos de código