2011-07-18 13 views
7

Estoy escribiendo una aplicación que se comunica con algunos servicios web. Cuando se actualiza una variable en el servidor, se devuelve una marca de tiempo Unix para indicarme cuándo se actualizó. Puedo compararlo usando:[[fecha NSDate] timeIntervalSince1970] parece que hay detrás de 1 hora

[[NSDate date]timeIntervalSince1970] 

para mantener las cosas en sincronía.

La hora del sistema en el iPhone es correcta. Pero el tiempo de Unix parece estar 1 hora detrás del servidor (y el tiempo del sistema como se muestra en el reloj). ¿Por qué está pasando esto? ¿Debo configurar un huso horario?

Respuesta

12

timeIntervalSince1970 se define para volver:

El intervalo entre el receptor y la fecha de referencia, 1º de enero 1970, GMT.

¿Es posible que esté comparando con una hora que se define como del 1 de enero de 1970 en alguna otra zona horaria? Si es así, lo más fácil de hacer es utilizar timeIntervalSinceDate: en lugar de timeIntervalSince1970, posiblemente después de haber utilizado NSDate de dateByAddingTimeInterval: para pasar de la fecha de referencia en GMT a la fecha de referencia en su zona horaria ideal.

Puede usar la propiedad de NSTimeZone secondsFromGMTForDate: si no desea codificar cosas.

+1

Creo que lo tiene. El problema parece estar relacionado con las zonas horarias. Intenté establecer NSDateFormatter en GMT y luego utilicé timeIntervalSinceDate: apuntando al 1 de enero de 1970 y parece funcionar correctamente. ¡Gracias! – MikeT

1

Como se puede entender a partir de su pregunta, el problema está en que la marca de tiempo devuelto por el servidor. Entonces, la verdadera pregunta es si tienes acceso a ese servidor. ¿O sabes en qué zona horaria está? Si primero, actualiza la hora en el servidor. Segundo: calcule la diferencia entre las zonas horarias (usted dice que es una hora) y agréguela a su instancia de NSDate. También puede usar NSCalendar, ya que tiene el método -(void)setTimeZone:(NSTimeZone *)timezone;. (Pensado que puede ser una sobrecarga para sus necesidades)

+1

que había utilizado antes, pero settimezone la pieza que falta parece ser timeIntervalSinceDate: en lugar de timeIntervalSince1970 que ha solucionado el problema. ¡Gracias por tu contribución! – MikeT

Cuestiones relacionadas