Pergunta

eu vejo isso NSTimeZone tem estes métodos:

defaultTimeZone  
localTimeZone  
systemTimeZone

Alguém pode me explicar, em termos simples, quais são as diferenças entre essas chamadas e quando uma deve ser usada em vez da outra?Não entendo nada nos documentos da Apple sobre isso.

Foi útil?

Solução

A linguagem nos documentos é um pouco seca, com certeza, e a semelhança dos nomes é potencialmente confusa.vou citar o NSTimeZone documentos aqui e tente explicá-los:

systemTimeZone
O fuso horário atualmente usado pelo sistema.Se o fuso horário atual não puder ser determinado, retornará o fuso horário GMT.

Este é o fuso horário em que o dispositivo acredita estar;geralmente é definido automaticamente e corresponderia à localização física do dispositivo, mas se o usuário tiver definido explicitamente um fuso horário específico no aplicativo Configurações, é isso que você obterá.

defaultTimeZone
O fuso horário padrão do aplicativo atual.Se nenhum fuso horário padrão tiver sido definido, este método invoca systemTimeZone e retorna o fuso horário do sistema.

Seu aplicativo tem permissão para definir seu próprio fuso horário, para que você possa executar ações como se o dispositivo estivesse em outro fuso horário, mas sem afetar o fuso horário do sistema (e, portanto, de outros aplicativos).A configuração é realizada com uma chamada para setDefaultTimeZone:.Se você ainda não fez isso, esta chamada é idêntica a ligar systemTimeZone.

localTimeZone
Um objeto que encaminha todas as mensagens para o fuso horário padrão do aplicativo atual.O fuso horário local representa o estado atual do fuso horário padrão em todos os momentos.

É aqui que fica um pouco complicado. localTimeZone fornece quase o mesmo resultado que defaultTimeZone.A diferença é que o específico NSTimeZone exemplo você obtém de localTimeZone sempre refletirá a configuração que você fez para o fuso horário no seu aplicativo.Você pode chamá-lo uma vez, salvar o resultado e sempre obter o fuso horário simulado atual por meio desse objeto, independentemente das alterações feitas.É como se, quando você usa isso NSTimeZone por exemplo, a estrutura está chamando defaultTimeZone para você, para ter certeza de que sempre obterá o valor atual.

Aqui estão algumas breves ilustrações do que foi dito acima.O NSTimeZone objeto do qual você volta systemTimeZone representa o fuso horário do sistema no momento em que você faz a chamada.Se você ligar systemTimeZone novamente, mesmo que o usuário tenha alterado o fuso horário, você obterá o mesmo.Seu aplicativo armazena esse valor em cache e você precisa solicitar ao sistema para limpá-lo com resetSystemTimeZone para obter a atualização.

// 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 semelhante acontece com defaultTimeZone.Ao chamar esse método, você obtém um objeto que sempre representará o mesmo fuso horário, mesmo que você chame posteriormente setDefaultTimeZone:.No entanto, se você usar o objeto obtido de localTimeZone, ele seguirá a alteração feita no fuso horário padrão*.

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

A Apple parece recomendo usar localTimeZone:

com o método da classe localTimeZone, você pode obter um objeto de fuso horário relativo que se decodifica para se tornar o fuso horário padrão em qualquer computador em que se encontre.


*Observe que localTimeZone ainda está sujeito ao cache no nível do aplicativo do fuso horário do sistema.Ele só muda para seguir sua configuração do padrão fuso horário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top