2011-01-18 27 views
5

Guardo las fechas y horas en mi tienda CoreData y necesito presentar con precisión a los usuarios la hora como se ingresó originalmente. El problema es que si ingresaron a las 4:00 en la Costa Este, y luego miran la hora registrada en la Costa Oeste, aparece como 1:00, ya que el iPhone traduce las horas universales a las horas locales. Lo necesito para mostrar 4:00 - probablemente 4:00 (+ 3h00).¿NSDate en CoreData encapsula la zona horaria?

Antes de ir y reestructurar mi modelo de datos centrales, quiero estar seguro de que no hay forma de derivar el NSTimeZone que estaba activo en el momento de la creación de un objeto NSDate almacenado. ¿Esta ahí? Si no, ¿alguna recomendación de cómo capturar NSTimeZone en el momento de la creación? ¿Un NSNumber que representa la diferencia de tiempo de creación de NSTimeZone de GMT?

Gracias.

+1

¡Buena pregunta! Es una confusión clásica. La respuesta corta es no.' –

Respuesta

8

Como ha descubierto, NSDate representa un punto universal en el tiempo y no incluye información específica de zona horaria.

Sugeriría que en lugar de almacenar el desplazamiento, almacene la propiedad name de NSTimeZone. Luego puede usar +[NSTimeZone timeZoneWithName:] para obtener la zona horaria y luego convertirla a la hora local. Esto le brinda la máxima flexibilidad en la forma de mostrar la información al usuario.

+0

+1 por no intentar cambiar con 'NSDate'! Almacenar información de zona horaria por separado es definitivamente el camino a seguir. –

+0

En la mayoría de los casos, también puede almacenar la fecha como GMT y realizar conversiones a la zona horaria local de los usuarios cuando necesite mostrar información. –

+0

¡Gracias! Parece un buen enfoque, excepto que no creo que la propiedad del nombre capture las compensaciones del horario de verano. Probablemente sea un verdadero caso límite, pero ¿no es posible que pueda usar el nombre de una zona horaria europea como base para la conversión a una estadounidense y obtener la conversión incorrecta porque la compensación de la zona horaria fue anormal durante esa semana o dos de DST sin sincronizar? ¿Tal vez lo mejor es capturar el desplazamiento de GMT en el momento de la entrada después de todo? Supongo que también podría almacenar el nombre de la zona horaria o abreviatura solo para información del usuario. – ed94133

Cuestiones relacionadas