Deseamos mostrarte la mejor respuesta que hallamos por todo internet. Nosotros esperamos que te resulte de ayuda y si deseas aportar algo que nos pueda ayudar a perfeccionar nuestra información hazlo con total libertad.
Solución:
Necesita un formato de entrada para convertir el ISO8601 string hasta la fecha y un formato de salida para volver a convertir la fecha a string:
let string = "2017-01-27T18:36:36Z"
let dateFormatter = DateFormatter()
let tempLocale = dateFormatter.locale // save locale temporarily
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = dateFormatter.date(from: string)!
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.locale = tempLocale // reset the locale
let dateString = dateFormatter.string(from: date)
print("EXACT_DATE : (dateString)")
Para convertir string a Date
objeto:
let string = "2017-01-27T18:36:36Z"
let isoFormatter = ISO8601DateFormatter()
let date = isoFormatter.date(from: string)!
O, si necesita admitir versiones de iOS anteriores ISO8601DateFormatter
:
let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
isoFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = isoFormatter.date(from: string)!
(Para entender por qué establecemos el locale
para el formateador de fecha ISO 8601, consulte Preguntas y respuestas técnicas de Apple 1480).
Luego, para convertir eso a un formato de fecha fácil de usar, usaría un formateador separado (o use el segundo ejemplo anterior, puede volver a usar el formateador, pero recuerde restablecer el locale
de regreso Locale.current
):
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let result = formatter.string(from:date)
Tenga en cuenta que sugeriría usar esos parámetros de estilo al presentar la fecha al usuario en lugar de la dateFormat
stringpor lo que usa los estilos apropiados para su ubicación, en lugar de asumir que quieren un reloj de 24 horas o no y/o si usan dd-MM-yyyy
contra MM-dd-yyyy
formato.
Tenga en cuenta que cambiar los formatos del formateador de fecha (por ejemplo, cambiar el dateFormat
string) es un proceso relativamente costoso, por lo que si está realizando este proceso para varias fechas, no tome una sola DateFormatter
y cambiar constantemente su dateFormat
o estilos repetidamente de un lado a otro (o peor aún, crear instancias de nuevos formateadores para cada fecha). En su lugar, cree un formateador por estilo de formato de fecha y reutilice su gramática tanto como sea posible.
Te invitamos a avalar nuestra función exponiendo un comentario o valorándolo te damos las gracias.