manumateos.dev

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

  1. New Date Formatter API in Swift, por Bruno Lorenzo.
  2. Creating Custom Parseable Format Styles in iOS 15, por Mark Thormann