iPhone NstimeZone: LocalTimeZone Confusion
-
20-09-2019 - |
Pergunta
Pelo que entendi, chamando
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
fornece o fuso horário local do dispositivo. O que está me dando é "US/CENTRAL", e não consigo encontrar isso em nenhum lugar da lista de abreviações em NSTIMIMEZONE ABREVIATIONETIONY, ou a lista de nomes de fuso horário em NSTIMEZONE KNELEWTimeZoneNames. De onde vem este? Eu preciso passar o fuso horário do dispositivo atual para um aplicativo Rails, e ele entende coisas como "Austrália/Sydney" ou "America/Chicago", mas não "US/CENTRAL".
Como faço para pegar o que o LocalTimeZone está me dando e convertê -lo em uma corda que os trilhos podem entender (ou seja, qualquer fuso horário em Nomes de Zoonetes de Saiba, que é suposto Ser todos os nomes de zona horário que o sistema conhece?)
Solução
Você provavelmente está usando ActiveSupport::TimeWithZone
sem exigir o tzinfo
gema:
$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00
Se você não precisar tzinfo
, você obterá apenas um subconjunto de fusos horários, o que é bastante inútil.
EDITAR: Apenas para evitar confusão, a razão pela qual usei o particular Time#get_zone
API é porque é isso que está sendo usado nos bastidores quando você liga Time#zone=
. Se você não precisar tzinfo
, chamando Time.send(:get_zone, "US/Central")
retorna nil
.
Outras dicas
Você está recebendo isso de dentro do simulador? Em caso afirmativo, o que esse comando retorna se você o executar de um terminal?
$ SystemSetup -getTimeZone
A GUI de configuração do fuso horário no Mac OS 10.5 definiria fusos horários para nós/*. Se você definir manualmente no console, poderá configurá -lo para um dos fusos horários esperados.
Execute isso para obter uma lista do válido e observe que a US/Central não está entre eles.
$ SystemSetup -ListTimeZones
Execute isso para defini -lo para a América/Chicago
$ SystemSetup -setTimeZone America/Chicago