2017-09-20 13 views
1

文字列に変換されたアクティブサポート時間オブジェクトをオブジェクトに戻すにはどうすればよいですか?つまり、文字列からアクティブサポートオブジェクトを見つけるにはどうすればいいですか?アクティブサポートタイムゾーンオブジェクトを文字列に戻してオブジェクトをレールに戻す

例:私はto_sを使ってこのオブジェクトを文字列に変換する場合

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

、私が手に "(GMT-11:00)米領サモア"。

"(GMT-11:00)アメリカンサモア"がある場合、どのようにオブジェクトを見つけることができますか?

答えて

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

これは括弧の最初のペアの間のすべてを排除し、残りの文字列をつかみます:

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

を...そしてそれをあなたはActiveSupport::Timezoneオブジェクトを見つけることができます。

ActiveSupport::Timezone[a]

0

私はそれらを試して、それが動作する答えをありがとう。 私はまた、私の名前を与え、私はノーおお

ActiveSupport::TimeZone[tz_value]. 
+0

を使用してオブジェクトを見つけています。この

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

を試してみました。それをしないでください。この "Mountain Time(US&Canada)"のような文字列を持つタイムゾーンがあるためです。 [ここ](http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html)を参照してください。これは、 'tz_value'が正しくないことを意味します。私の答えは実際には[Railsのドキュメント](http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html)に従っています。ここでは、to_s()のソースコードを見て文字列からの正確なタイムゾーン –

+0

ありがとう!私はそれを通過し、それに応じて私のコードを変更します:) –

+0

問題はありません! :) –

関連する問題