【问题标题】:Parsing a TimeZone name string that includes GMT offset hours解析包含 GMT 偏移时间的 TimeZone 名称字符串
【发布时间】:2019-09-13 00:10:23
【问题描述】:

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

API 调用返回以下格式,看起来他们正在使用Time.zone.to_s

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

我想将"(GMT-08:00) Pacific Time (US & Canada)"解析成一个Ruby类并输出TimeZone名称"Pacific Time (US & Canada)"

或者,我可以去掉 "(GMT-08:00)" 偏移量并留下一个干净的 TimeZone 名称 "Pacific Time (US & Canada)" 但这似乎是一个混乱的字符串编辑解决方案。

【问题讨论】:

    标签: ruby-on-rails ruby timezone shopify


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,如果我找不到将 API 的 Time.zone.to_s 解析回 Ruby 类的方法,那么我将使用字符串剥离解决方案
    【解决方案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 常量。虽然我会尽可能避免使用它,原因在底部“Rails 时区标识符”部分的the timezone tag wiki 中提到。

    【讨论】:

    • 谢谢,我错过了API参考中的iana_timezone属性
    • @kg。您的问题是关于 parsing 来自(外部)API 的给定时区字符串,而这个答案是关于 formatting 时区。它是如何解决你的解析问题的?
    • 这是一个XY Problem。如何从 Shopify API 中获取可用时间一个标识符是 X。解析字符串是 Y。
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多