2016-08-01 9 views
0

私はタイムゾーンが"(GMT + 00:00)UTC"、 "(GMT + 05:30)チェンナイ"などです。また、月曜日、2016年8月1日17:00:00 UTC +00:00のようなタイムスタンプがあります。私はタイムゾーンに基づいてタイムスタンプ時間を変更する必要があります。タイムスタンプのタイムゾーンも変更しないでください。私はレール4.0.0を使用しています。すべての試行で、文字列は変換できないことを示します。誰でもこれを助けてくれますか?タイムゾーンにタイムゾーンを追加するにはどうすればよいですか?

+0

は、タイムゾーンが強いから来たんでしたか? ActiveSupport :: TimeZoneで提供されている名前のリストを代わりに使用できますか? – spickermann

答えて

1

まず第一に、あなたは文字列からタイムゾーンを取得する必要があります。

tz_as_string = "(GMT+05:30) Chennai" 
tz_name = tz_as_string[/(?<=\)).*/] # ⇒ "Chennai" 
tz_timezone = ActiveSupport::TimeZone::MAPPING[tz_name] #⇒ "Asia/Kolkata" 

と、最終的には:

tz = ActiveSupport::TimeZone.new tz_timezone 
#⇒  #<ActiveSupport::TimeZone:0x000000107a91c0 @name="Asia/Kolkata", ... 
Time.parse('Mon, 01 Aug 2016 17:00:00 UTC +00:00').in_time_zone tz 
#⇒ Mon, 01 Aug 2016 22:30:00 IST +05:30 
関連する問題