Получить полное имя часового пояса с учетом экземпляра ActiveSupport :: TimeWithZone - PullRequest
0 голосов
/ 25 августа 2018

Учитывая ActiveSupport::TimeWithZone экземпляр времени, как я могу вернуть полное имя часового пояса для экземпляра времени?

Из документов ActiveSupport:

Time.zone = 'Eastern Time (US & Canada)'   # => "Eastern Time (US & Canada)"
time = Time.zone.now
time.zone # => "EST"

Итак, учитывая времяобъект, я могу легко получить сокращение часового пояса , используя time.zone, но как я могу получить полное имя часового пояса?В примере из документации это будет "Eastern Time (US & Canada)" (я также был бы счастлив с "America/New_York")?

Я понимаю, что названия часовых поясов не стандартизированы, и на этом этапе я будурады найти способ преобразовать аббревиатуру в любой не сокращенный формат (например, "Eastern Time (US & Canada)" или "America/New_York").

Кажется, что нет встроенного обратного отображения сокращений часового пояса обратно вчасовые пояса.По крайней мере, я не нашел это.Очевидно, я мог бы создать свое собственное отображение, но кажется вполне вероятным это решенная проблема.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Похоже, сокращения не являются уникальными. Таким образом, один аббревиатура типа «ACT» может означать 2 разных часовых пояса, один в Южной Америке и один в Австралии https://www.timeanddate.com/time/zones/. Это объясняет, почему у ruby ​​нет встроенного способа делать то, что вам нужно.

Может быть, вы можете использовать этот камень https://github.com/davispuh/TimezoneParser

0 голосов
/ 25 августа 2018

Кажется, проблема в том, что я не взаимодействую с экземпляром ActiveSupport::TimeWithZone, как я думал.

ActiveSupport::TimeWithZone должен иметь атрибут time_zone, который возвращает то, что я хочу, но стандартный объект Time просто имеет метод zone(), который возвращает строковое сокращение часового пояса.

...