Анализ строки имени TimeZone, которая включает в себя часы смещения по Гринвичу - PullRequest
1 голос
/ 23 апреля 2019

Я нашел этот вопрос , но я все еще не могу найти простое решение для следующего:

Вызов API возвращает следующий формат, который выглядит так, как будто он использует Time.zone.to_s

irb> ShopifyAPI::Shop.current.timezone
=> "(GMT-08:00) Pacific Time (US & Canada)"

Я бы хотел разобрать "(GMT-08: 00) Pacific Time (США и Канада)" в класс Ruby и вывести имя TimeZone "Pacific Time (США и Канада)) "

С другой стороны, я мог бы просто удалить смещение" (GMT-08: 00) "и оставить чистое имя TimeZone" Pacific Time (США и Канада) ", но это похоже на грязное решение для редактирования строк.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

ShopifyAPI::Shop.current возвращает свойства , задокументированные здесь . Да, timezone является одним из них, но оно предназначено для отображения имени, а не для анализа.

Вместо этого используйте свойство iana_timezone, которое даст вам идентификатор часового пояса IANA , например America/Los_Angeles. Они совместимы с Rails, а также с гемом Ruby tzinfo, а также используются во многих других платформах.

irb> ShopifyAPI::Shop.current.timezone
=> "(GMT-08:00) Pacific Time (US & Canada)"

irb> ShopifyAPI::Shop.current.iana_timezone
=> "America/Los_Angeles"

Если вы хотите получить часовой пояс Rails оттуда, вы можете использовать константу MAPPING, определенную в ActiveSupport::TimeZone. Хотя я бы избегал этого, если это возможно, по причинам, указанным в теге часового пояса wiki в разделе «Идентификаторы часового пояса Rails» внизу.

1 голос
/ 23 апреля 2019

Если вы уверены, что API и формат строки вы получите, вы можете манипулировать строкой как

string.partition(')').last.strip
# => Pacific Time (US & Canada)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...