Question NSTimeZone: quelle est la différence entre localTimeZone et systemTimeZone?


Sous la classe NSTimeZone, il y a à la fois + localTimeZone et + systemTimeZone. J'ai fait un test sur le simulateur d'iphone, les deux renvoient l'objet NSTimeZone indiquant le même fuseau horaire. Quelle est la différence? Lequel dois-je utiliser pour trouver le réglage du fuseau horaire de l'iPhone? Merci

Mon test:

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
NSLog(@"System Time Zone %@",[[NSTimeZone systemTimeZone] name]);

37
2017-10-06 17:31


origine


Réponses:


L’utilisateur (ou votre application ou une autre application) peut modifier le fuseau horaire par défaut d’une application (en utilisant +[NSTimeZone setDefaultTimeZone]) ou le fuseau horaire du système (en utilisant les Préférences Système) à tout moment. +[NSTimeZone localTimeZone] renvoie un proxy qui agira toujours comme si c'était le actuel fuseau horaire par défaut pour l'application, même si cette valeur par défaut change. Vous pouvez modifier le fuseau horaire par défaut d'une application pour qu'elle se comporte comme si elle se trouvait dans un fuseau horaire différent.

+[NSTimeZone systemTimeZone] renvoie le actuel le fuseau horaire du système (comme défini dans les Préférences Système). Dans la plupart des cas, elles seront identiques (le fuseau horaire par défaut de l'application est défini sur le fuseau horaire du système au démarrage de l'application, je crois).

Si vous voulez connaître le réglage du fuseau horaire du système, vous voulez probablement utiliser +[NSTimeZone systemTimeZone]. Si vous voulez juste le bon fuseau horaire pour que votre application fonctionne, vous voudrez probablement +[NSTimeZone localTimeZone].


49
2017-10-06 18:20



Les docs sont une mine d'informations utiles pour ce genre de chose. Dans ce cas, ils disent:

  • localTimeZone est le fuseau horaire par défaut de l'application en cours. Cela peut être défini par l'utilisateur ou par programme dans l'application (ou éventuellement par d'autres moyens). C'est essentiellement un pointeur vers defaultTimeZone avec un niveau d'indirection; si le fuseau horaire par défaut change, localTimeZone  volonté changer aussi.
  • systemTimeZone, d'autre part, est le fuseau horaire utilisé par le système central. Une valeur en cache pour cette ne sera pas changer si le fuseau horaire du système change pendant l'exécution de l'application, contrairement à localTimeZone.

22
2017-10-06 18:17