iPhone - les Différences entre les temps de la zone de confort des méthodes
Je vois que NSTimeZone
a ces méthodes :
defaultTimeZone
localTimeZone
systemTimeZone
Quelqu'un peut m'expliquer, en termes simples, quelles sont les différences entre ces appels, et où l'on doit être utilisé à la place de l'autre? Je ne comprends rien à l'intérieur de l'Apple docs à ce sujet.
Vous devez vous connecter pour publier un commentaire.
La langue dans les docs est un peu sur le côté sec, pour être sûr, et de la similitude des noms est potentiellement source de confusion. Je vais citer le
NSTimeZone
docs ici et essayer de les expliquer:C'est le temps de la zone où l'appareil croit qu'il est; c'est souvent automatiquement, et correspondent à la physique de l'unité de lieu, mais si l'utilisateur a explicitement définir un fuseau horaire particulier dans l'Application des Paramètres, c'est ce que vous allez obtenir.
Votre application est autorisé à établir son propre fuseau horaire, de sorte que vous pouvez effectuer des actions comme si l'appareil était dans une autre zone, mais sans affecter le fuseau horaire du système (et donc d'autres applications). Le réglage est effectué avec un appel à
setDefaultTimeZone:
. Si vous n'avez pas fait cela, cet appel est identique à l'appel desystemTimeZone
.C'est là que ça devient un peu difficile.
localTimeZone
vous donne presque le même résultat quedefaultTimeZone
. La différence, c'est que l'NSTimeZone
exemple que vous obtenez à partirlocalTimeZone
reflètent toujours le réglage que vous avez effectué dans le fuseau horaire à l'intérieur de votre application. Vous pouvez appeler ça une fois, enregistrez le résultat, et de toujours obtenir le courant de temps simulé de la zone par le biais de cet objet, peu importe les changements effectués. C'est comme si, lorsque vous utilisez cetteNSTimeZone
exemple, le cadre de l'appeldefaultTimeZone
pour vous, afin d'être sûr que vous obtenez toujours la valeur actuelle.Voici quelques brèves illustrations ci-dessus. Le
NSTimeZone
objet que vous obtenez de retour desystemTimeZone
représente le fuseau horaire du système au moment de l'appel. Si vous appelezsystemTimeZone
de nouveau, même si l'utilisateur a changé depuis le temps de la zone, vous obtiendrez le même. Votre application dans les caches de la valeur, et que vous avez à demander au système de l'effacer avecresetSystemTimeZone
pour obtenir la mise à jour.Une chose semblable se produit avec
defaultTimeZone
. Lorsque vous appelez cette méthode, vous obtenez un objet qui représentera toujours le même fuseau horaire, même si plus tard vous appelezsetDefaultTimeZone:
. Toutefois, si vous utilisez l'objet que vous obtenez à partir delocalTimeZone
, il suivra le changement que vous faites dans le fuseau horaire par défaut*.Apple semble vous recommandons d'utiliser
localTimeZone
:*Notez que
localTimeZone
est toujours sous réserve de l'application-niveau de cache du système de fuseau horaire. Il change seulement de suivre votre réglage de la par défaut fuseau horaire.localTimeZone
vous donne presque le même résultat quedefaultTimeZone
. J'ai essayé d'illustrer la seule différence à la fin de ma réponse: leNSTimeZone
objet que vous obtenez à partir delocalTimeZone
reflètent toujours le réglage que vous avez effectué dans le fuseau horaire à l'intérieur de votre application. Vous pouvez appeler ça une fois, enregistrez l'objet, et de toujours obtenir le courant de temps simulé de la zone par le biais de cet objet, peu importe les changements effectués. C'est comme si, lorsque vous utilisez cet objet, le cadre de l'appeldefaultTimeZone
pour vous à chaque fois, pour être sûr de toujours obtenir la valeur actuelle. Cela vous aide?localTimeZone
sera de refléter les changements. Mais cela ne se produira pas avec une variable qui contient le résultat dedefaultTimeZone
. Est ce que le droit ?[NSTimeZone systemTimeZone]
dans mon application, changer le fuseau horaire dans mon appareil (sans avoir à redémarrer l'application), et de l'appeler à nouveau. Dans chaque appel de la fuseau horaire actuel de l'appareil a été retourné (c'est à dire, le premier appel n'a pas cache je n'ai d'appel+resetSystemTimeZone
).