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

问题描述 投票:1回答:2

我确实找到了this question,但我仍然在寻找以下简单的解决方案:

API调用返回以下格式,看起来像是使用Time.zone.to_s

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

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

或者,我可以删除“(GMT-08:00)”偏移量,并留下一个干净的TimeZone名称“太平洋时间(美国和加拿大)”,但这似乎是一个混乱的字符串编辑解决方案。

ruby-on-rails ruby timezone shopify
2个回答
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时区,你可以使用MAPPING中定义的ActiveSupport::TimeZone常量。虽然如果可能的话我会避免它,因为the timezone tag wiki在底部的“Rails时区标识符”部分中提到的原因。


1
投票

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

string.partition(')').last.strip
# => Pacific Time (US & Canada)
© www.soinside.com 2019 - 2024. All rights reserved.