Nuevas API para parsear fechas
Pocas cosas odio más que manejar fechas y horas en mi código. Creo que es una tirria compartida: las API de NSDateFormatter y demás[^ Aplica también a los parseos de divisas, por ejemplo.] son incómodas y ocupan muchas líneas para acciones tan elementales como transformar una string
que representa un timestamp en un objeto Date
.
Por suerte en iOS 15 y Swift 5.5 se introdujeron nuevas API que reducen esto a mucho menos código y más sencillo de entender. Yo voy a dejar esta nota relativa a un uso extremadamente básico y relacionado solo con fechas, pero hay una parte dedicada a divisas. Mira los enlaces del final.
Parseo básico de una fecha
Pongamos que tenemos una fecha del tipo "2023-04-14"
. Podemos definir su formato con una línea de este estilo:
var formatStyle = Date.ISO8601FormatStyle(dateTimeSeparator: .standard).year().month().day().dateSeparator(.dash)
A partir de aquí podemos utilizar algo como formatStyle.parse("2023-04-14")
o formatStyle.format(Date())
para obtener, respectivamente, un objeto Date o String. (En el primer caso hay que colocarlo dentro de un bloque do
y poner un try
porque puede lanzar una excepción, que conviene manejar para el caso en el que la cadena de la fecha no esté bien formada.)
Enlaces de interés
- New Date Formatter API in Swift, por Bruno Lorenzo.
- Creating Custom Parseable Format Styles in iOS 15, por Mark Thormann