Trabalhando com datas e horas em Swift: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Datas e Horários em Swift: do Básico às Técnicas Avançadas



Trabalhar com datas e horários é uma das tarefas essenciais no desenvolvimento de aplicativos para iOS e macOS. O Swift fornece um conjunto poderoso e flexível de ferramentas para esse fim: Date, DateFormatter, Calendar, DateComponents e TimeInterval. Neste artigo, vamos detalhar cada um deles, mostrar exemplos práticos e aprender a resolver tarefas típicas, como formatação de datas, cálculo de diferenças de tempo, trabalho com fusos horários e calendários.



1. Fundamentos: a classe Date e TimeInterval



O tipo básico para representar um momento no tempo é Date. Ele armazena o número de segundos desde 1º de janeiro de 2001, 00:00:00 UTC (data de referência da Apple).



Criação e comparação de datas:

import Foundation

// Data e hora atuaislet now = Date()print("Agora: \\(now)")

// Data baseada em um intervalo de tempo (120 segundos a partir do momento atual)let futureDate = Date(timeIntervalSinceNow: 120)print("Daqui a 2 minutos: \\(futureDate)")

// Data baseada em um intervalo fixo a partir da data de referêncialet specificDate = Date(timeIntervalSinceReferenceDate: 3600 * 24 * 365) // 1 ano a partir de 2001print("Data aproximada: \\(specificDate)")

// Comparação de datasif now < futureDate { print("A data atual é anterior à data futura")}


TimeInterval é simplesmente um apelido para Double, representando o número de segundos. Ele é usado para calcular a diferença entre datas:

let startDate = Date()sleep(2) // Simulação de atrasolet endDate = Date()

let elapsed: TimeInterval = endDate.timeIntervalSince(startDate)print("Passaram \\(elapsed) segundos") // Exibirá ~2.0

// Operação inversalet minutes: TimeInterval = 5 * 60let fiveMinutesLater = Date(timeInterval: minutes, since: startDate)


2. Formatação de Datas com DateFormatter



Para exibir a data ao usuário de forma compreensível, usa-se DateFormatter. Ele suporta localização e vários estilos.



Formatação básica:

let formatter = DateFormatter()formatter.locale = Locale(identifier: "pt_BR") // Localidade brasileiraformatter.timeZone = TimeZone.current       // Fuso horário atual

// Estilos padrãoformatter.dateStyle = .fullformatter.timeStyle = .shortprint(formatter.string(from: Date())) // Exemplo: "sexta-feira, 24 de fevereiro de 2025, 14:30"

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


Formato personalizado:

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

// Análise de string para datalet dateString = "25/12/2024 10:00"if let parsedDate = formatter.date(from: dateString) { print("Data analisada: \\(parsedDate)")}


Importante: Ao analisar, sempre verifique se date(from:) não retorna nil. O formato incorreto da string ou incompatibilidade de localidade resultará em erro.



3. Cálculos de Calendário: Calendar e DateComponents



A classe Calendar encapsula informações sobre o sistema de calendário (gregoriano, islâmico, budista, etc.) e permite realizar operações complexas com datas. DateComponents é usado para descrever componentes individuais de uma data (ano, mês, dia, hora, etc.).



Extração de componentes:

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

print("Ano: \\(components.year!)")print("Mês: \\(components.month!)")print("Dia: \\(components.day!)")print("Dia da semana: \\(components.weekday!)") // 1 - domingo, 2 - segunda-feira...

Blogs

Book Recommendations