2013-10-16 5 views

risposta

7

dalle rotaie ActiveSupport::TimeZone docs:

La versione di tzinfo bundle con Supporto Active include solo le definizioni necessarie per sostenere le zone definite dal fuso orario classe. Se hai bisogno di usare zone che non sono definite da TimeZone, dovrai installare la gemma TZInfo (se una versione recente della gem è installata localmente, questa sarà usata al posto della versione in bundle.)

Personalmente, penso che i fusi orari di Rails siano sciocchi. Sono arbitrariamente limitati a ciò che Rails descrive come "un sottoinsieme significativo di 146 zone". Ma non fanno nulla per spiegare come determinano quali zone sono "significative" e quali sono scartate.

Gli identificatori come "Stati Uniti/Pacifico" sono noti come "collegamenti" o "alias" nei dati TZDB. Ho potuto vedere che forse potrebbero essere omessi da Rails, ma ci sono molti altri fusi orari del mondo reale che mancano del tutto.

L'unico luogo in cui sono stati visualizzati gli identificativi dei fusi orari di Rails nel mondo reale è l'API di Twitter. D'altra parte, gli identificatori IANA/TZDB sono onnipresenti.

Il miglior consiglio che posso offrire è quello di dimenticare Rails fusi orari, e basta usare Ruby TZInfo Gem direttamente. Ha l'implementazione completa di TZDB con tutte le zone, inclusi gli alias.

Se davvero si deve continuare a utilizzare le zone Rails, è possibile utilizzare prima TZInfo per risolvere l'alias nella zona effettiva, quindi verificare se quella zona si trova nel dizionario Rails MAPPING. Per esempio:

"US/Pacific" => "America/Los_Angeles"     (via TZInfo) 

"America/Los_Angeles" => "Pacific Time (US & Canada)" (via Rails MAPPING) 

Credo che quando si carica "US/Pacific" via tzinfo, sarà sottoclassi come un oggetto LinkedTimezoneInfo, così si potrebbe utilizzare l'attributo link_to_identifier da lì.

+0

'' '' TZInfo :: Timezone.get ('US/Pacific'). Link_to_identifier''''NoMethodError. – ajbraus

+0

@ajbraus - 'America/Vancouver' è una zona distinta, non un collegamento. Quindi non avrà un attributo 'link_to_identifier'. Ma ahimè, non è una zona nella lista delle zone "significative" di Rails. Quindi non c'è molto che potresti fare qui, tranne usare la gemma TZInfo in esclusiva e * non * provare a mapparli alle zone di Rails. –

+0

@ajbraus - hai visto che hai aggiornato il tuo commento per mostrare "US/Pacific": quello è davvero un link. –

1

In questo comando verranno visualizzati i 144 nomi del fuso orario.

ActiveSupport :: TimeZone.zones_map

+0

Non ha "" US/Pacific "" – user842563

Problemi correlati