コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsでタイムゾーンを気にする日時変換をするなら、to_timeよりもin_time_zone

開発環境がローカルで、サーバーはAWSとかだったりすると起きる問題。

環境

rails (5.2.0)

事象

to_time は環境のタイムゾーンで算出する。 to_i とかすると顕著にわかる

JST環境

> "2018-6-1 20:00".to_time
=> 2018-06-01 20:00:00 +0900
> "2018-6-1 20:00".to_time.to_i
=> 1527850800

UTC環境

> "2018-6-1 20:00".to_time
=> 2018-06-01 20:00:00 +0000
> "2018-6-1 20:00".to_time.to_i
=> 1527883200

このように起こす文字列同じなのにずれてしまう

解決策

Railsには in_time_zone があるのでそれを使うとRailsタイムゾーンに準拠してくれるので、ぶれない。

JST環境

> "2018-6-1 20:00".in_time_zone
=> Fri, 01 Jun 2018 20:00:00 JST +09:00
> "2018-6-1 20:00".in_time_zone.to_i
=> 1527850800

UTC環境

> "2018-6-1 20:00".in_time_zone
=> Fri, 01 Jun 2018 20:00:00 JST +09:00
> "2018-6-1 20:00".in_time_zone.to_i
=> 1527850800

おなじになった。

参考サイト