2014-10-21 1 views
2

Я пытаюсь получить массив всех часовых поясов tzinfo, но мне нужно только часть «Америка/Лос-Анджелесе» от каждого, чтобы я мог проверять время, получаемое от мобильного клиента iOS. В настоящее время работает следующим образом:Как получить tzinfo из ActiveSupport :: TimeZones.zones_map?

ActiveSupport::TimeZone.zones_map.values.collect { |z| z.tzinfo } 

Я получаю класс TZInfo::TimezoneProxy вместе с информацией мне нужно.

ответ

2

Попробуйте следующий код:

ActiveSupport::TimeZone::MAPPING.values 
+1

Извините за крайне поздний ответ .... НО Я закончил с time_zones = ActiveSupport :: TimeZone.zones_map.values.collect {| z | z.tzinfo.identifier}. – dsieczko

+0

Ваш ответ более чист. – dsieczko

1

Зоны в ActiveSupport::Timezones ограничиваются подмножеством 146 «значимых» зон, хотя они не определяют тем, что они critera определить, какие зоны «смысл».

Если вы используете его для проверки идентификаторов часовых поясов IANA, поступающих с другой платформы, у вас наверняка будут ложные негативы, так как их более 500.

Вместо этого используйте TZinfo Gem напрямую, а не странную мутированную версию Rail's. См. Также раздел «Идентификаторы часовых поясов Rails» в the timezone tag wiki.

+0

Норвежская столица Осло не входит в «значащий» список, но Среднеколымск (поп 3525). Очень странно. – jjg