Trabalho com datas em Swift (iOS/macOS): visão geral das bibliotecas
No desenvolvimento para iOS e macOS, trabalhar com datas e horas é uma das tarefas principais. O framework padrão Foundation fornece ferramentas poderosas, mas às vezes complexas. Para simplificar o código e aumentar a legibilidade, os desenvolvedores costumam usar bibliotecas de terceiros. Neste artigo, veremos os recursos nativos do Swift (Foundation) e duas bibliotecas populares: SwiftDate e DateTools.
1. Foundation: recursos integrados
O conjunto básico de ferramentas do Foundation inclui Date, DateFormatter, Calendar e TimeZone. Isso é suficiente para a maioria das tarefas, mas requer código verboso.
Exemplo: criação e formatação de data
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:00Exemplo: cálculo da diferença entre datas
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!) dias, \\(components.hour!) horas")Prós do Foundation: sem dependências, controle total, suporte a todos os fusos horários e calendários.
Contras: muito código para operações simples, complexidade com localização e datas relativas.
2. SwiftDate — biblioteca poderosa e flexível
SwiftDate é uma das bibliotecas mais populares para trabalhar com datas em Swift. Ela estende os recursos do Foundation, adicionando métodos convenientes para parsing, formatação, manipulação e trabalho com fusos horários.
Instalação (Swift Package Manager)
// Package.swiftdependencies: [ .package(url: "https://github.com/malcommac/SwiftDate.git", from: "6.3.0")]Exemplo: criação de data a partir de string
import SwiftDate
let date = "2025-04-01T14:30:00+0000".toDate()print(date?.toFormat("dd.MM.yyyy HH:mm")) // 01.04.2025 14:30Exemplo: datas 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 2025Exemplo: trabalho com fusos horários
let parisDate = DateInRegion(Date(), region: .init(calendar: Calendars.gregorian, zone: Zones.europeParis, locale: Locales.french))print(parisDate.toFormat("HH:mm")) // hora em ParisPrós do SwiftDate: sintaxe concisa, suporte integrado para datas relativas, regiões e locales, parsing poderoso.
Contras: tamanho grande da biblioteca (~2 MB), pode ser excessiva para projetos simples.
3. DateTools — simplicidade e legibilidade
DateTools é uma biblioteca leve, focada na facilidade de leitura do código. Ela adiciona métodos a Date para cálculo rápido de intervalos, comparação e formatação.
Instalação (CocoaPods)
pod 'DateToolsSwift'Exemplo: verificação de intervalos de tempo
import DateToolsSwift
let date1 = Date()let date2 = date1 + 2.hoursprint(date2.isToday) // trueprint(date1.earlierDate(date2) == date1) // trueExemplo: strings legíveis para humanos
let pastDate = Date() - 3.daysprint(pastDate.timeAgoSinceNow) // "3 days ago"
let futureDate = Date() + 1.weeksprint(futureDate.timeAgoSinceNow) // "in 1 w Também na biblioteca
Geolocalização e Mapas em C# (.NET): Visão Geral de Bibliotecas e Ferramentas
Criptografia em Java: criptografia e hash – guia prático
lo para Go: guia completo com exemplos práticos
Trabalhando com Excel em Swift no iOS e macOS: bibliotecas e exemplos
Actors em Swift: Guia Completo com Exemplos Práticos