Pregunta

Tengo una cita, 2010-08-23 13:30:00 -0400 y yo estoy tratando de conseguir que en la zona horaria GMT +2. La diferencia en cuestión de segundos es 21600, pero cuando llamo [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];, me sale 2010-08-24 01:30:00 +0200 que debe ser 2010-08-23 19:30:00 +0200. Cualquier idea de lo que estoy haciendo mal?

¿Fue útil?

Solución

Un objeto de fecha representa un momento específico en el tiempo, independientemente de lo que los relojes de diferentes personas podrían haber dicho en ese momento.

Las zonas horarias se involucran cuando se quiere mostrar la fecha, ya que se le suelen mostrar lo que el reloj del usuario habría dicho (o está diciendo, o va a decir) en ese momento. Esto es exactamente lo que sucede cuando un NSLog NSDate:. La descripción de la fecha es ese momento de tiempo representado en su zona horaria local

agregan o restando de un NSDate no es la conversión de zona horaria. Suma y resta producen NSDates que representan otro momentos en el tiempo; en su caso, se está creando una NSDate por un momento 6 horas más tarde desde el momento en que se inició con, no en el mismo momento en el otro lado del planeta.

Para simplificar, la conversión de zona horaria está mirando a mismo tiempo en diferentes puntos en el espacio (diferentes secciones de la superficie del planeta), mientras que la adición fecha y resta son < em> computación diferentes momentos .

No hay conversión de zona horaria de un NSDate, ya que no se encuentra en una zona horaria, para empezar. Una zona horaria solamente se involucra al formatear la fecha para esa zona horaria. Por lo tanto, para mostrar que la fecha de alguna otra zona horaria, acaba de hacer eso. Típicamente, esto significa que suministran la zona horaria deseada a su fecha formateador .

Otros consejos

veo que la fecha en que recibe parte posterior tiene una zona horaria diferente, no +200 -400. Si nota que se verá que ese resultado es exactamente 12 horas (o 6 horas + 6 horas) más tarde de la fecha original. ¿Te ha por casualidad cambiar la configuración regional, así cuando se hizo la nueva fecha? Cuando se realizó el cambio que empezó a dar que +200 en lugar de -400 el sistema ajusta automáticamente la hora de compensar, a continuación, que ha añadido otras 6 horas a la fecha. NSDate almacena todas las fechas como un intervalo de tiempo desde ene 1 de 2001 GMT y se ajusta para zonas horarias, según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top