5

私はこの文字列を持っています:

10月7日(日)午後4時

を使用するTime.parseと、RubyはタイムゾーンがUTCであると想定します。Rubyに-0700タイムゾーンを指定するにはどうすればよいですか?使ってみました

tz.utc_to_local(Time.parse(string))

しかし、UTC+0000タイムゾーンを取り戻します。

4

2 に答える 2

1

「時間情報を解析するときは、タイム ゾーンを指定せずに決して実行しないことが重要です。」

その貴重なアドバイスは、次の便利なブログ投稿からのものです: 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"
于 2012-10-08T02:03:46.933 に答える
0

タイムゾーンが正しく設定されていることを確認してください

config.time_zone = 'Eastern Time (US & Canada)'

Time.parse はデフォルトで現在のタイムゾーンに設定する必要がありますが、試すこともできます

Time.parse('####').in_time_zone
于 2012-10-08T01:30:45.397 に答える