Domanda

Vedo che NSTimeZone ha questi metodi:

defaultTimeZone  
localTimeZone  
systemTimeZone
.

Qualcuno può spiegarmi a me, in termini semplici, quali sono le differenze di chi sono queste chiamate, e quando si dovrebbe essere usata al posto dell'altro?Non capisco nulla dentro i documenti di mela su questo.

È stato utile?

Soluzione

La lingua dei documenti è un po 'sul lato asciutto, per essere sicuro, e la somiglianza dei nomi è potenzialmente confusa. Cither the NSTimeZone Docs qui e prova a spiegarli :

.

systemTimeZone
Il fuso orario attualmente utilizzato dal sistema. Se il fuso orario corrente non può essere determinato, restituisce il fuso orario GMT.

Questo è il fuso orario che il dispositivo crede che sia in; Spesso è impostato automaticamente e corrisponderebbe quindi alla posizione fisica del dispositivo, ma se l'utente ha impostato esplicitamente un particolare fuso orario nell'app Impostazioni, è quello che otterrai.

.

defaultTimeZone
Il fuso orario predefinito per l'applicazione corrente. Se non è stato impostato alcun fuso orario predefinito, questo metodo richiama systemTimeZone e restituisce il fuso orario del sistema.

L'applicazione è consentita di impostare il proprio fuso orario, in modo da poter eseguire azioni come se il dispositivo fosse in un'altra zona, ma senza influenzare il fuso orario del sistema (e quindi altre app). L'impostazione viene eseguita con una chiamata a setDefaultTimeZone:. Se non l'hai fatto, questa chiamata è identica a chiamare systemTimeZone.

.

localTimeZone
Un oggetto che inoltra tutti i messaggi al fuso orario predefinito per l'applicazione corrente. Il fuso orario locale rappresenta in ogni momento lo stato corrente del fuso orario predefinito.

È qui che diventa un po 'complicato. localTimeZone ti dà quasi lo stesso risultato di defaultTimeZone. La differenza è che l'istanza specifica NSTimeZone che ottieni da localTimeZone rifletterà sempre l'impostazione che hai effettuato al fuso orario all'interno della tua app. Puoi chiamarlo una volta, salvare il risultato e ottenere sempre il fuso orario simulato corrente attraverso quell'oggetto, non importa le modifiche apportate. È come se, quando si utilizza l'istanza NSTimeZone, il framework chiamano defaultTimeZone per te, per essere sicuro di ottenere sempre il valore corrente.

Ecco un paio di brevi illustrazioni di cui sopra. L'oggetto NSTimeZone che si riprese da systemTimeZone rappresenta il fuso orario del sistema al momento in cui effettua la chiamata. Se chiami di nuovo systemTimeZone, anche se l'utente ha cambiato il fuso orario, otterrai lo stesso. La tua app cache che valore e devi chiedere al sistema di cancellarlo con resetSystemTimeZone per ottenere l'aggiornamento.

// 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
.

Una cosa simile avviene con defaultTimeZone. Quando si chiama quel metodo, ottieni un oggetto che rappresenterà sempre lo stesso fuso orario, anche se in seguito chiama setDefaultTimeZone:. Tuttavia, se si utilizza l'oggetto che ottieni da localTimeZone, seguirà la modifica apportata al fuso orario predefinito *.

// 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 sembra Consiglia di utilizzare localTimeZone:

.

Con il metodo di classe di LocaltimeZone, è possibile ottenere un oggetto fuso orario relativo che si decodifica per diventare il fuso orario predefinito su qualsiasi computer su cui si trova.


.

* Nota che localTimeZone è ancora soggetto alla cache a livello di app del fuso orario del sistema. Modifica solo per seguire le impostazioni del fuso orario predefinito .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top