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 vous citer l' NSTimeZone
docs ici et essayer de les expliquer:
systemTimeZone
Le fuseau horaire actuellement utilisées par le système. Si le fuseau horaire actuel ne peut pas être déterminé, renvoie le fuseau horaire GMT.
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.
defaultTimeZone
Le fuseau horaire par défaut pour l'application en cours. Si aucun fuseau horaire par défaut a été définie, cette méthode appelle systemTimeZone
et renvoie le fuseau horaire du système.
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 à l' setDefaultTimeZone:
. Si vous n'avez pas fait cela, cet appel est identique à l'appel de systemTimeZone
.
localTimeZone
Un objet qui transmet tous les messages de le fuseau horaire par défaut pour l'application en cours. Le fuseau horaire local représente l'état actuel de l'heure par défaut de la zone à tout moment.
C'est là que ça devient un peu difficile. localTimeZone
vous donne presque le même résultat que l' defaultTimeZone
. La différence, c'est que l' NSTimeZone
exemple vous obtenez à partir d' localTimeZone
reflète 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 cette NSTimeZone
de l'instance, le cadre est en appelant defaultTimeZone
pour vous, afin d'être sûr que vous obtenez toujours la valeur actuelle.
Voici quelques brèves illustrations ci-dessus. L' NSTimeZone
objet que vous obtenez de retour de systemTimeZone
représente le fuseau horaire du système au moment de l'appel. Si vous appelez systemTimeZone
encore, 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 vous devez vous demander le système à claire-il avec resetSystemTimeZone
pour obtenir la mise à jour.
// 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
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 appelez setDefaultTimeZone:
. Toutefois, si vous utilisez l'objet que vous obtenez à partir d' localTimeZone
,, il suivra le changement que vous faites dans le fuseau horaire par défaut*.
// 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 semble recommandons l'utilisation d' localTimeZone
:
avec le localTimeZone méthode de classe, vous pouvez obtenir un temps relatif à la zone de l'objet qui décode lui-même pour devenir le fuseau horaire par défaut sur n'importe quel ordinateur sur lequel elle se trouve.
*Notez qu' 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 valeur par défaut de fuseau horaire.