DateFormatter devuelve una fecha inesperada para la zona horaria
He leído varias publicaciones sobre esto, y la mayoría se debió a que no se configuró una zona horaria específica y que el sistema no obtuvo la actual. Mi escenario es ligeramente diferente y da resultados inesperados, así que intentaré explicarlo en detalle.
Estoy tratando con un backend que devuelve fechas divididas en una fecha y una hora, almacenadas como un valor entero. Por ejemplo, un valor de retorno podría ser131006
, que se traduciría a13:10:06
. Sé que este backend siempre devuelve la fecha enUTC. Lo convierto en una cadena y convierto la cadena en una fecha con el siguiente código:
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HHmmss"
timeFormatter.timeZone = TimeZone(identifier: "UTC")
let time = timeFormatter.date(from: "131006")
Para hacer algunas verificaciones, escribí algunas declaraciones impresas en este código. El más importante aquí, esprint(timeFormatter.timeZone.abbreviation())
, que devuelveOptional("GMT")
. Esto está bien y como se esperaba, ya que GMT == UTC. También verifiqué el valor del tiempo, que devuelve2000-01-01 13:10:06 +0000
, que sigue siendo el resultado esperado.
Ahora en el código donde luego formateo esa fecha en la cadena deseada, con la zona horaria deseada:
let timeToString = DateFormatter()
timeToString.dateFormat = "HH:mm"
timeToString.timeZone = TimeZone.current
let timeString = timeToString.string(from: time!)
En este código, también imprimo elTimeZone.current.abbreviation())
propiedad, que devuelveOptional("GMT+2")
, que nuevamente es el resultado esperado. Sin embargo, cuando imprimimos el valor detimeString
variable, la salida es14:10
, en lugar del resultado esperado de15:10
.
¿Qué tiene de malo la forma en que uso DateFormatter? ¡Gracias!