解析包含GMT偏移时间的TimeZone名称字符串

时间:2019-04-23 18:36:35

标签: ruby-on-rails ruby timezone shopify

我确实找到了this question,但我仍在努力寻找以下解决方案:

API调用返回以下格式,就像他们正在使用Time.zone.to_s

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

我想将“(GMT-08:00)太平洋时间(美国和加拿大)”解析为Ruby类,并输出TimeZone名称“太平洋时间(美国和加拿大)”

或者,我可以剥离“(GMT-08:00)”偏移量,并留下一个干净的TimeZone名称“ Pacific Time(美国和加拿大)”,但这似乎是一个凌乱的字符串编辑解决方案。

2 个答案:

答案 0 :(得分:2)

ShopifyAPI::Shop.current返回属性documented here。是的,timezone是其中之一,但这只是显示名称,而不是您应该解析的名称。

相反,请使用iana_timezone属性,该属性将为您提供IANA time zone identifier,例如America/Los_Angeles。它们与Rails以及Ruby的tzinfo gem兼容,并且还用于许多其他平台。

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

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

如果要从那里获取Rails时区,可以使用ActiveSupport::TimeZone中定义的MAPPING常量。尽管我会尽可能避免这样做,但出于the timezone tag wiki底部“ Rails时区标识符”部分中提到的原因。

答案 1 :(得分:1)

如果您对将要接收的API和字符串格式有信心,则可以将字符串操作为

string.partition(')').last.strip
# => Pacific Time (US & Canada)