Probado con Swift 4
Obtener la fecha y hora actuales
Puede obtener la fecha y hora actuales de la siguiente manera:
let currentDateTime = Date()
Sin embargo, Date
es un número de coma flotante de 64 bits que mide la cantidad de segundos desde la fecha de referencia del 1 de enero de 2001 a las 00:00:00 UTC . Puedo ver ese número para la fecha y hora actual usando
Date().timeIntervalSinceReferenceDate
Al momento de escribir esto, regresó 497626515.185066
, probablemente no exactamente lo que estaba buscando. Sigue leyendo.
Crear otra fecha y hora
Método 1
Si conoce el número de segundos antes o después de la fecha de referencia, puede usar eso.
let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Método 2
Por supuesto, sería más fácil usar cosas como años, meses, días y horas (en lugar de segundos relativos) para hacer un Date
. Para esto, puede usar DateComponents
para especificar los componentes y luego Calendar
crear la fecha. El Calendar
da el Date
contexto. De lo contrario, ¿cómo sabría en qué zona horaria o calendario expresarlo?
// 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)
Aquí se pueden encontrar otras abreviaturas de zona horaria . Si lo deja en blanco, el valor predeterminado es utilizar la zona horaria del usuario.
Método 3
La forma más sucinta (pero no necesariamente la mejor) podría ser usar DateFormatter
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Los estándares técnicos Unicode muestran otros formatos queDateFormatter
soporta.
Mostrar la fecha y la hora
Método 1
Si solo desea mostrar ciertos componentes de la fecha o la hora, puede usar CalendarUnit
para especificar los componentes de los que desea extraer 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
Ver esta respuesta también.
Método 2
El Método 1 le proporcionó los componentes, pero sería mucho trabajo formatear esos números para cada estilo, idioma y región. Y no necesitas hacerlo. Esto ya se hizo con la DateFormatter
clase.
// 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
Aquí hay una continuación del código anterior que muestra más opciones de formato:
// "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)
Sin embargo, tenga en cuenta que esto es para inglés con la región establecida en los EE. UU. Para otros idiomas y regiones, el formato se verá diferente.
Estudio adicional