将字符串中的活动支持时区对象转换回rails中的对象

时间:2017-09-20 10:56:14

标签: ruby-on-rails timezone activesupport

如何将转换为字符串的活动支持时间对象转换回对象,换句话说,如何从字符串中找到活动支持对象?

示例:

 a = ActiveSupport::TimeZone.all.first = 
#<ActiveSupport::TimeZone:0x007f8c45bc1848 @name="American Samoa", 
@tzinfo=#<TZInfo::TimezoneProxy: Pacific/Pago_Pago>, @utc_offset=nil>

如果我使用to_s将此对象转换为字符串,我会得到“(GMT-11:00)美属萨摩亚”。

如果我有“(格林威治标准时间-11:00)美属萨摩亚”,我怎样才能找到该物品。

3 个答案:

答案 0 :(得分:2)

这将消除第一对括号之间的所有内容并获取剩余的字符串:

a = ActiveSupport::TimeZone.all.first.to_s.match(/\(.*?\) (.*)/)[1]

...然后你可以找到ActiveSupport::Timezone对象:

ActiveSupport::Timezone[a]

答案 1 :(得分:1)

# let
timezone_string = '(GMT-11:00) American Samoa'

# let's capture the "American Samoa" substring from above (as an example)
matches = timezone_string.match /\(GMT.*?\) (.*)/
timezone_name = matches[1]

# then we look up the corresponding Timezone object using the "American Samoa" timezone_name
timezone = ActiveSupport::TimeZone[timezone_name]

答案 2 :(得分:0)

感谢您的答案,我确实尝试过它们的确有效。 我也试过这个

tz_value = business_timezone.split(')').second.strip 

这给了我名字,我正在使用

找到对象
ActiveSupport::TimeZone[tz_value].