Testado com Swift 4
Obtendo a data e hora atuais
Você pode obter a data e hora atuais de maneira simples:
let currentDateTime = Date()
No entanto, Date
é um número de ponto flutuante de 64 bits que mede o número de segundos desde a data de referência de 1 de janeiro de 2001 às 00:00:00 UTC . Eu posso ver esse número para o datetime atual usando
Date().timeIntervalSinceReferenceDate
No momento da redação deste artigo, ele retornou 497626515.185066
, provavelmente não exatamente o que você estava procurando. Continue lendo.
Criando outra data e hora
Método 1
Se você souber o número de segundos antes ou depois da data de referência, poderá usá-lo.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Método 2
Obviamente, seria mais fácil usar coisas como anos, meses, dias e horas (em vez de segundos relativos) para criar um Date
. Para isso, você pode usar DateComponents
para especificar os componentes e Calendar
criar a data. O Calendar
dá o Date
contexto. Caso contrário, como saberia em que fuso horário ou calendário expressá-lo?
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34
// Create date from components
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)
Outras abreviações de fuso horário podem ser encontradas aqui . Se você deixar em branco, o padrão é usar o fuso horário do usuário.
Método 3
A maneira mais sucinta (mas não necessariamente a melhor) pode ser usar DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
o normas técnicas Unicode mostrar outros formatos que DateFormatter
suporta.
Exibindo a Data e Hora
Método 1
Se você deseja exibir apenas determinados componentes da data ou hora, pode usar CalendarUnit
para especificar os componentes dos quais deseja extrair Date
.
// get the current date and time
let currentDateTime = Date()
// get the user's calendar
let userCalendar = Calendar.current
// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second
]
// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)
// now the components are available
dateTimeComponents.year // 2016
dateTimeComponents.month // 10
dateTimeComponents.day // 8
dateTimeComponents.hour // 22
dateTimeComponents.minute // 42
dateTimeComponents.second // 17
Veja esta resposta também.
Método 2
O método 1 forneceu os componentes, mas seria muito trabalhoso formatar esses números para todos os estilos, idiomas e regiões. E você não precisa. Isso já foi feito para você com a DateFormatter
turma.
// get the current date and time
let currentDateTime = Date()
// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long
// get the date time String from the date object
formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM
Aqui está uma continuação do código acima que mostra mais opções de formatação:
// "10/8/16, 10:52 PM"
formatter.timeStyle = .short
formatter.dateStyle = .short
formatter.string(from: currentDateTime)
// "Oct 8, 2016, 10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.string(from: currentDateTime)
// "October 8, 2016 at 10:52:30 PM GMT+8"
formatter.timeStyle = .long
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "October 8, 2016"
formatter.timeStyle = .none
formatter.dateStyle = .long
formatter.string(from: currentDateTime)
// "10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .none
formatter.string(from: currentDateTime)
Porém, lembre-se de que isso é para inglês com a região definida para os EUA. Para outros idiomas e regiões, a formatação será diferente.
Um estudo mais aprofundado