LoginSignup
10
10

More than 5 years have passed since last update.

[Rails]わざわざJSTにしたTimezone設定をUTCに戻すよ on AWS

Last updated at Posted at 2015-04-14

日本のサービスだし運用の都合がいいJSTに全て変換しよう!というのはよくあると思うんですが、

「あれやっぱりグローバル対応を見据えてUTCに..」
「ほかがUTCだから揃えたい..」

っていう展開になったときに戻す手順です。

1. EC2インスタンスのタイムゾーンをUTCに。

1-1. まずはインスタンスのTimezone設定を戻す。

ls -al /etc/localtime
# cp
sudo cp /usr/share/zoneinfo/UTC /etc/localtime 
# ln -s
sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime 

注意:
必ずls -alして現状を確認しましょう。
記事によってはシンボリックリンクでやるやり方があるが、そこをcpで上書きしてしまうと、大本の/usr/share/zoneinfo/Japanを上書きしてしまい、戻すのはできますが面倒です(戻すはめになった経験あり)。

【追記】1-2. サーバーの再起動

timezoneを変更した場合、全てのプロセスに変更を反映させるために、サーバーの再起動が必要です。(hirot78さん、ご指摘ありがとうございます!)

$ sudo reboot

2. active_recordのtimezoneをデフォルトのUTCに。

active recordの設定がlocalになっている場合は戻しましょう。デフォルトはUTCになります。

    config.time_zone = 'Tokyo'
-   config.active_record.default_timezone = :local
+   # config.active_record.default_timezone = :local

3. Time.now, DateTime.now、Date.todayをTime.zoneで置き換え

JSTを意図して書いていたTme,DateTime,Dateを書き換えます。timezone設定を変えたことで意図した時間にならないケースがあるためです。

よくあるのは以下のようなケースでしょうか。

Time.now => Time.zone.now
DateTime.now => Time.zone.now
Date.today => Time.zone.now.to_date or Time.current.to_date

TimeとTime.zoneの違いは、config.time_zone = 'Tokyo' で指定したタイムゾーンかどうかです。

# timezoneがTokyoの場合
> Time.now
=> 2015-04-14 14:37:19 +0000 #UTC
> Time.zone.now
=> Tue, 14 Apr 2015 23:37:25 JST +09:00
> Time.current
=> Tue, 14 Apr 2015 23:37:29 JST +09:00
> Time.current.to_date
=> Tue, 14 Apr 2015
> Date.today
=> Tue, 14 Apr 2015 # defaultのタイムゾーンでのdateとなってしまうので注意。

ポイントはなるべくTime.zoneを使うことです。Dateもつかってもいいですが、Date.todayなどはUTC時間で呼ばるため注意。timezoneのtodayがほしいときはTime.current.to_dateがスマート。

以上。

参考

10
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10