iPhone NSTimeZone: fuso orario locale confusione
-
20-09-2019 - |
Domanda
Da quello che ho capito, chiamando
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
ti dà il fuso orario locale del dispositivo. Quello che mi sta dando è "US / Centrale" , e non riesco a trovare che ovunque nella lista delle abbreviazioni in [NSTimeZone abbreviationDictionary] , o la lista di fuso orario nomi in [NSTimeZone knownTimeZoneNames] . Dove si trova questo proviene? Ho bisogno di passare il tempo dispositivo orario corrente ad un'applicazione Rails, e capisce le cose come "Australia / Sydney" o "America / Chicago" , ma non "US / centrale" .
Come faccio a prendere quello fuso orario locale mi sta dando e convertirlo in una stringa che Rails può capire (cioè qualsiasi fuso orario in knownTimeZoneNames, che è dovrebbe per essere tutti i nomi di fuso orario che il sistema sa circa?)
Soluzione
Si sta probabilmente utilizzando ActiveSupport::TimeWithZone
senza aver richiesto la gemma tzinfo
:
$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00
Se non si richiedono tzinfo
, si otterrà solo un sottoinsieme dei fusi orari, che è abbastanza inutile.
Modifica : Giusto per evitare confusione, il motivo per cui ho usato l'API Time#get_zone
privata è perché questo è ciò che viene utilizzato dietro le quinte quando si chiama Time#zone=
. Se non si richiede tzinfo
, chiamando Time.send(:get_zone, "US/Central")
ritorna nil
.
Altri suggerimenti
Si stanno ottenendo che all'interno del simulatore?
Se sì, quali fa questo comando restituisce per se lo si esegue da un terminale?
$ Systemsetup -gettimezone
L'interfaccia grafica impostazione del fuso orario in Mac OS 10.5 avrebbe messo fusi orari a US / *. Se si imposta manualmente dalla console è possibile impostarla su uno dei fusi orari previsti.
Esegui questo per ottenere un elenco dei validi, e notare che gli Stati Uniti / centrale non è tra questi.
$ Systemsetup -listtimezones
Esegui questo per impostarlo America / Chicago
$ Systemsetup -settimezone America / Chicago