Es gibt bereits eine Frage, die die Konvertierung von "America/Los_Angeles" in "Pacific Time (US & Kanada)" beantwortet. Ich möchte jedoch "US/Pacific" und andere veraltete Zeitzonen in Rails TimeZone konvertieren. Ich kann in der Bibliothek nichts finden, was mir dabei hilft.Wie bekomme ich Namen von Rails TimeZone aus veralteten TZInfo-Bezeichnern?
Antwort
von den Schienen ActiveSupport::TimeZone docs:
Die Version von Tzinfo mit aktiver Unterstützung gebündelt nur die erforderlichen Definitionen enthält die Zonen durch die Time-Zone definiert unterstützen Klasse. Wenn Sie Zonen verwenden müssen, die nicht von TimeZone definiert sind, müssen Sie das TZInfo-Juwel installieren (wenn eine aktuelle Version des Gems lokal installiert ist, wird diese anstelle der mitgelieferten Version verwendet.)
Persönlich denke ich, dass die Zeitzonen von Rails albern sind. Sie sind willkürlich auf das begrenzt, was Rails als "eine sinnvolle Teilmenge von 146 Zonen" beschreibt. Aber sie tun nichts, um zu erklären, wie sie bestimmen, welche Zonen "sinnvoll" sind und welche verworfen werden.
Bezeichner wie "US/Pacific" werden in den TZDB-Daten als "Links" oder "Aliase" bezeichnet. Ich konnte sehen, dass sie vielleicht in Rails weggelassen wurden, aber es gibt viele andere reale Zeitzonen, die gänzlich fehlen.
Der einzige Ort, den ich alle Rails Zeitzonen Identifikatoren in der realen Welt gesehen habe, ist in der Twitter API. Auf der anderen Seite sind IANA/TZDB-Identifikatoren allgegenwärtig.
Der beste Rat, den ich anbieten kann, ist über Zeitzonen von Rails zu vergessen, und verwenden Sie einfach den Ruby TZInfo Gem direkt. Es verfügt über die vollständige TZDB-Implementierung mit allen Zonen, einschließlich Aliase.
Wenn Sie wirklich weiterhin Rails-Zonen verwenden müssen, könnten Sie zuerst TZInfo verwenden, um den Alias in die tatsächliche Zone aufzulösen und dann zu sehen, ob diese Zone im Rails MAPPING
Wörterbuch enthalten ist. Zum Beispiel:
"US/Pacific" => "America/Los_Angeles" (via TZInfo)
"America/Los_Angeles" => "Pacific Time (US & Canada)" (via Rails MAPPING)
Ich glaube, wenn Sie laden „US/Pacific“ über Tzinfo, wird es als LinkedTimezoneInfo
Objekt subclassed werden, so dass Sie das Attribut link_to_identifier
von dort nutzen könnten.
In diesem Befehl werden die 144 Zeitzonennamen angezeigt.
Active :: TimeZone.zones_map
Es hat keine "" US/Pacific "" – user842563
'' '' TZInfo :: Timezone.get ('US/Pacific'). Link_to_identifier''''NoMethodError. – ajbraus
@ajbraus - 'Amerika/Vancouver' ist eine eindeutige Zone, keine Verbindung. Es wird also kein 'link_to_identifier' Attribut haben. Aber leider ist es keine Zone, die in Rails Liste von "sinnvollen" Zonen steht. Es gibt also nicht viel, was du hier tun könntest, außer dass du den TZInfo-Edelstein exklusiv nutzt und nicht versuchst, sie zurück in die Rails-Zonen zu mappen. –
@ajbraus - Sie haben Ihren Kommentar aktualisiert, um 'US/Pacific' zu zeigen - das ist in der Tat ein Link. –