Pregunta

Veo que NSTimeZone tiene estos métodos :

defaultTimeZone  
localTimeZone  
systemTimeZone

Puede alguien que me explique, en términos simples, lo que son las diferencias entre esas llamadas, y cuando uno debe ser usado en lugar del otro?No entiendo nada dentro de la Manzana documentación acerca de esto.

¿Fue útil?

Solución

El lenguaje en la documentación es un poco en el lado seco, para estar seguro, y de la similitud de los nombres es potencialmente confuso.Voy a citar el NSTimeZone docs aquí y tratar de explicar de ellos:

systemTimeZone
La zona horaria utilizada actualmente por el sistema.Si la zona horaria actual no se puede determinar, devuelve la zona horaria de GMT.

Esta es la zona horaria que el dispositivo se cree que está en;es a menudo establecen automáticamente y, a continuación, corresponden a la ubicación física, pero si el usuario ha establecido explícitamente un momento particular de la zona en la Aplicación de Configuración, que es lo que obtendrá.

defaultTimeZone
La zona horaria predeterminada para la aplicación actual.Si no hay ningún valor predeterminado de tiempo de la zona se ha establecido, este método invoca systemTimeZone y devuelve la hora del sistema de la zona.

Su aplicación se le permite establecer su propia zona horaria, por lo que puede realizar acciones como si el dispositivo en otra zona, pero sin afectar a la zona horaria del sistema (y así de otras aplicaciones).El ajuste se realiza con una llamada a setDefaultTimeZone:.Si no lo han hecho, esta llamada es idéntica a llamar systemTimeZone.

localTimeZone
Un objeto que envía todos los mensajes a la zona horaria predeterminada para la aplicación actual.La zona horaria local representa el estado actual de la zona horaria predeterminada en todo momento.

Aquí es donde se pone un poco complicado. localTimeZone le da casi el mismo resultado que defaultTimeZone.La diferencia es que la NSTimeZone instancia que recibe de localTimeZone siempre reflejará el ajuste que ha realizado a la zona horaria dentro de la aplicación.Usted puede llamar de una vez, guardar el resultado, y siempre obtener la corriente de tiempo simulada de la zona a través de ese objeto, no importa los cambios realizados.Es como si, cuando se utiliza este NSTimeZone ejemplo, el marco está llamando defaultTimeZone para usted, para asegurarse de que usted siempre obtener el valor actual.

He aquí un par de breves ilustraciones de los de arriba.El NSTimeZone objeto de obtener de systemTimeZone representa la zona horaria del sistema en el momento de hacer la llamada.Si usted llame systemTimeZone de nuevo, incluso si el usuario ha cambiado la zona horaria, obtendrá la misma.Su aplicación en caché ese valor, y usted tiene que hacer que el sistema claro con resetSystemTimeZone para obtener la actualización.

// Say that device is in GMT originally
NSLog(@"%@", [NSTimeZone systemTimeZone]);    // GMT
// User flies into Rome and iPhone changes the zone automatically
NSLog(@"%@", [NSTimeZone systemTimeZone]);    // Still GMT
[NSTimeZone resetSystemTimeZone];    // Clear app's cache
NSLog(@"%@", [NSTimeZone systemTimeZone]);    // Now GMT+2

Algo similar ocurre con defaultTimeZone.Cuando llame a este método, se obtiene un objeto que representará siempre la misma zona de tiempo, incluso si usted llame más tarde setDefaultTimeZone:.Sin embargo, si se utiliza el objeto de obtener de localTimeZone, va a seguir el cambio de la zona horaria predeterminada*.

// Say that defaultTimeZone is originally GMT
NSTimeZone * myDefaultTZ = [NSTimeZone defaultTimeZone];
NSTimeZone * myLocalTZ = [NSTimeZone localTimeZone];
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Etc/GMT-4"]];
NSLog(@"%@", myDefaultTZ);    // Still gives GMT
NSLog(@"%@", [NSTimeZone defaultTimeZone]);    // GMT-4, the new value
NSLog(@"%@", myLocalTZ);    // Also the new value!

Apple parece recomendamos el uso de localTimeZone:

con el localTimeZone método de la clase, usted puede conseguir un tiempo relativo de la zona objeto de que decodifica sí misma para convertirse en la zona horaria predeterminada en cualquier equipo en el que se encuentra.


*Tenga en cuenta que localTimeZone aún está sujeta a la aplicación de caché de nivel de la zona horaria del sistema.Sólo se cambia para seguir la configuración de la por defecto la zona horaria.

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