kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Railsのtime_zone

勉強会周りの記事をあと2つほど書く予定ですが、レポートで出力されている日付とユーザが入力する日付を日本時間として扱うためにいろいろ調べたのでそれをまとめておきます。

 

active_recordからDBにレコードを保存する際に使われるtime_zoneとアプリ側で使われるtime_zoneがあります。今回はアプリ側の設定で問題を解決します。

 

で、まずはtime_zoneをappに設定するには、設定ファイルの値を変更することになる。

デフォルトでは、application.rbにコメントアウトされている。

config.time_zone = 'Tokyo'にする。

```

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.

    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.

    config.time_zone = 'Tokyo'

```

これによりTime.nowで現在の日本時間(ローカルタイム)がとれて、

Time.now.utcにより,utc時刻がとれます。

JSTからUTCでは、9時間の時間差があるのであってそうですね。

```

Time.zone

=> #<ActiveSupport::TimeZone:0x007fe23d4ab4c0 @name="Tokyo", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Asia/Tokyo>, @current_period=nil>

irb(main):004:0> Time.now

=> 2014-01-17 22:15:11 +0900

irb(main):005:0> Time.now.utc

=> 2014-01-17 13:15:13 UTC

```

 

この辺りの設定値を変える影響に関してはQiitaで記事がでていて、

http://qiita.com/semind/items/68341489a9c5149b815d

これが参考になると思います。開発環境はrailsのversion 3.xのようです。

 

こういった2次的資料がいやであれば、

http://guides.rubyonrails.org/active_support_core_extensions.html

 

サンプルコードもあるので、動作を直感的につかみやすいと思っています。