Formatos de horas y fechas en iOS

Horas

Muchas veces creamos nuestras aplicaciones para que sean usadas a nivel internacional y por lo general debemos trabajar con formatos de fechas y horas.

Normalmente si queremos presentar al usuario la hora con un formato estándar por ejemplo 10:30 AM usamos el siguiente código

let today = Date()  
var formatter = DateFormatter()  
// 🙈 Bad way 
formatter.dateFormat = "hh:mm a"  
let dateString = formatter.string(from: today) // 10:30 AM  

Si ejecutamos este código veremos que funciona perfectamente. Ahora te preguntaras ¿pero que puede estar mal? 🤔. Pues bien imagina que tu aplicación la descargan en china, la hora se vería así

let dateString = formatter.string(from: today) // 10:30 上午  

lo cual genera un error de formato ya que en esta región siempre se antepone am o pm a la hora, así que el formato correcto seria 上午 10:30.

Para solucionar este problema deberas hacer un pequeño ajuste

let today = Date()  
var formatter = DateFormatter()  
// 👍🏻 Right way
formatter.timeStyle = .short  
let dateString = formatter.string(from: today)  
// 10:30 AM US
// 上午 10:30 China

También puedes usar diferentes tipos de formato para la hora

formatter.timeStyle = .short  
let dateString = formatter.string(from: today) // 10:30 AM

formatter.timeStyle = .medium  
let dateString = formatter.string(from: today) // 10:30:14 AM

formatter.timeStyle = .long  
let dateString = formatter.string(from: today) // 10:30:14 AM GMT-5

formatter.timeStyle = .full  
let dateString = formatter.string(from: today) // 10:30:14 AM Colombia Standard Time  

Fechas

Para el caso de las fechas es muy similar al de la hora y tenemos los mismos estilos de formato lo único que debes hacer es usar la propiedad dateStyle

let formatter = DateFormatter()

formatter.dateStyle = .short  
let dateString = formatter.string(from: today) // 6/17/17

formatter.dateStyle = .medium  
let dateString = formatter.string(from: today) // Jun 17, 2017

formatter.dateStyle = .long  
let dateString = formatter.string(from: today) // June 17, 2017

formatter.dateStyle = .full  
let dateString = formatter.string(from: today) // Saturday, June 17, 2017  

Ahora si queremos usar nuestros propios formatos podemos hacerlo por medio de la propiedad LocalizedDateFormatFromTemplate de la siguiente forma

// iOS 8
let formatter = DateFormatter()

formatter.setLocalizedDateFormatFromTemplate("yMd")  
let dateString = formatter.string(from: today) // 6/17/2017

formatter.setLocalizedDateFormatFromTemplate("dM")  
let dateString = formatter.string(from: today) // 6/17

formatter.setLocalizedDateFormatFromTemplate("dMMM")  
let dateString = formatter.string(from: today) // Jun 17

formatter.setLocalizedDateFormatFromTemplate("EdMMM")  
let dateString = formatter.string(from: today) // Sat, Jun 17  

si quieres conocer mas formatos puedes consular aqui.

Una cosa mas...

Si alguna vez has tenido que mostrar nombres de personas en tu aplicación y necesitas obtener nombres y apellidos por separado puedes usar la clase PersonNameComponentsFormatter que te podrá ser de mucha utilidad.

// iOS 9
let personFormatter = PersonNameComponentsFormatter()

if let components = personFormatter.personNameComponents(from: "Jose Aponte"){  
    print(components.givenName)
    print(components.familyName)
}

Este API no se limita a separar las cadenas de texto por espacios o cantidad de caracteres, tiene su propia logia estadística que proporciona muy buenos resultados, de seguro querrás probarla.

Espero que te haya gustado este post, recuerda que si tiene comentarios puedes dejarlos al final.

Jose Aponte

Desarrollador full-stack apasionado por las tecnologías de información y los lenguajes de programación. Me gustan divertirme con mi familia, mi lema es "Nunca paras de Aprender"

Bogota

Subscribe to Jappsku Engineering Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!