Introdução ao trabalho com datas e horas em Swift
Trabalhar com datas e horas é uma das tarefas principais no desenvolvimento de aplicativos para iOS e macOS. Seja para exibir a data atual, calcular a diferença entre eventos ou agendar notificações, o Swift fornece um conjunto de ferramentas poderoso e flexível para esses fins. Neste artigo, vamos abordar as principais classes e métodos: Date, DateFormatter, Calendar, DateComponents e TimeInterval. Você aprenderá como criar, formatar, comparar e manipular datas em Swift.
O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos. Todos os exemplos de código podem ser usados imediatamente em seus projetos.
Principais classes para trabalhar com datas
Classe Date
Date é o tipo fundamental que representa um momento específico no tempo, independentemente do fuso horário ou calendário. Ele armazena o número de segundos desde 1º de janeiro de 2001 (época do Cocoa).
import Foundation
// Data e hora atuaislet now = Date()print("Agora: \\(now)")
// Data daqui a 1 horalet oneHourLater = Date(timeIntervalSinceNow: 3600)print("Daqui a uma hora: \\(oneHourLater)")
// Data a partir de um número determinado de segundos desde a épocalet epochDate = Date(timeIntervalSinceReferenceDate: 0)print("Época do Cocoa: \\(epochDate)")TimeInterval
TimeInterval é simplesmente um apelido para Double, representando um número de segundos. É usado para definir intervalos de tempo.
let interval: TimeInterval = 86400 // 24 horas em segundoslet tomorrow = Date(timeIntervalSinceNow: interval)print("Amanhã: \\(tomorrow)")DateFormatter
DateFormatter é responsável por converter uma data em string e vice-versa. Esta é uma das classes mais usadas.
let formatter = DateFormatter()formatter.dateStyle = .longformatter.timeStyle = .short
let currentDate = Date()let dateString = formatter.string(from: currentDate)print("Data formatada: \\(dateString)")
// Conversão inversalet dateFromString = formatter.date(from: "15 de abril de 2025, 14:30")print("Data a partir da string: \\(dateFromString ?? Date())")Você pode definir um formato personalizado usando dateFormat:
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"let customString = formatter.string(from: Date())print("Formato personalizado: \\(customString)")Calendário e componentes de data
Calendar
Calendar permite trabalhar com datas no contexto de um calendário específico (gregoriano, islâmico, etc.) e fuso horário.
let calendar = Calendar.currentlet components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: Date())print("Ano: \\(components.year!), Mês: \\(components.month!), Dia: \\(components.day!)")DateComponents
DateComponents é uma estrutura que contém componentes individuais de data (ano, mês, dia, hora, etc.). Ela é usada para criar novas datas ou extrair partes de datas existentes.
// Criando uma data a partir de componentesvar birthdayComponents = DateComponents()birthdayComponents.year = 1990birthdayComponents.month = 6birthdayComponents.day = 15birthdayComponents.hour = 10
if let birthday = calendar.date(from: birthdayComponents) { print("Aniversário: \\(birthday)")}
// Adicionando dias a uma dataif let nextWeek = calendar.date(byAdding: .day, value: 7, to: Date()) { print("Daqui a uma semana: \\(nextWeek)")}Os componentes podem ser usados para verificar propriedades da data:
let isToday = calendar.isDateInToday(Date())print("Hoje? \\(isToday)")
let isWeekend = calendar.isDateInWeekend(Date())print("Fim de semana? \\(isWeekend)")