私はこの文字列を持っています:
10月7日(日)午後4時
を使用するTime.parse
と、RubyはタイムゾーンがUTCであると想定します。Rubyに-0700タイムゾーンを指定するにはどうすればよいですか?使ってみました
tz.utc_to_local(Time.parse(string))
しかし、UTC+0000タイムゾーンを取り戻します。
「時間情報を解析するときは、タイム ゾーンを指定せずに決して実行しないことが重要です。」
その貴重なアドバイスは、次の便利なブログ投稿からのものです: Ruby on Rails でのタイム ゾーンの操作。
レールを使用しているかどうかに関係なく、時間文字列には常にタイムゾーンが関連付けられています。あなたの場合、時間文字列に -0700 オフセットがあると想定していますが、タイムゾーン情報を parse メソッドに渡していません (これは UTC であると想定しています)。
> Rails.application.config.time_zone
=> "Mountain Time (US & Canada)"
これは、次の構成があるためです。
config.time_zone = 'Mountain Time (US & Canada)'
> string = "Sunday, Oct 7 4:00pm"
=> "Sunday, Oct 7 4:00pm"
> Time.parse(string)
=> 2012-10-07 16:00:00 -0600
> Time.parse(string).zone
=> "MDT"
純粋なルビーでも同じように動作します:
> require 'time'
=> true
> Time.local( 2012, 10, 07 )
=> 2012-10-07 00:00:00 -0600
> Time.local( 2012, 10, 07 ).zone
=> "MDT"
> string = "Sunday, Oct 7 4:00pm"
=> "Sunday, Oct 7 4:00pm"
> Time.parse(string)
=> 2012-10-07 16:00:00 -0600
> Time.parse(string).zone
=> "MDT"
タイムゾーンが正しく設定されていることを確認してください
config.time_zone = 'Eastern Time (US & Canada)'
Time.parse はデフォルトで現在のタイムゾーンに設定する必要がありますが、試すこともできます
Time.parse('####').in_time_zone