Saltar al contenido

iOS Swift 3: convertir el formato “yyyy-MM-dd’T’HH:mm:ssZ” string objeto hasta la fecha

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *