LoginSignup
2
1

More than 5 years have passed since last update.

Amazon Linux AMIとUbuntuでのTimeZone設定 date PHP Ruby JavaでのTimeZone出力確認

Posted at

Amazon Linux AMIとUbuntuでのTimeZone設定と設定によってPHP Ruby Javaの出力の違いを確認してみました。

Amazon Linux AMIの初期設定 確認

Amazon Linux AMIの初期設定は/etc/localtime /etc/sysconfig/clock共にUTCになっています。

/etc/localtime /etc/sysconfig/clockの初期設定

$ cat /etc/localtime
TZif2UTCTZif2UTC
UTC0

$ cat /etc/sysconfig/clock 
ZONE="UTC"
UTC=true

date PHP Ruby Javaでの確認

$ date
2016年 xx月 xx日 x曜日 xx:xx:xx UTC

$ php -a
php > echo date_default_timezone_get();
UTC

$ irb
irb(main):001:0> Time.now.zone
=> "UTC"

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="UTC",...]

Ubuntuの初期設定 確認

Ubuntuには/etc/sysconfig/clockが存在しない代わりに/etc/timezoneが存在します。

/etc/localtime /etc/timezoneの初期設定

$ cat /etc/localtime
TZif2UTCTZif2UTC
UTC0

$ cat /etc/timezone
UTC

date PHP Ruby Javaでの確認

$ date
xx xx:xx:xx UTC 2016

$ php -a
php > echo date_default_timezone_get();
UTC

$ irb
irb(main):001:0> Time.now.zone
=> "UTC"

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="UTC",...]

Amazon Linux AMIとUbuntuのlocaltimeの変更

Amazon Linux AMIとUbuntu共に/usr/share/zoneinfo以下の中から設定したいTimeZoneを選び、/etc/localtimeにリンクを張ります。

TimeZoneをAmerica/Los_Angelesに変更

$ ls /usr/share/zoneinfo
Africa      Chile    Factory    Iceland      MET       posix       UCT
America     CST6CDT  GB     Indian       Mexico    posixrules  Universal
Antarctica  Cuba     GB-Eire    Iran         MST       PRC     US
Arctic      EET      GMT    iso3166.tab  MST7MDT   PST8PDT     UTC
...

$ sudo ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

localtimeをAmerica/Los_Angelesに変更後Amazon Linux AMIで確認

/etc/localtimeをAmerica/Los_Angelesに変更後/etc/localtime /etc/sysconfig/clockの確認

$ cat /etc/localtime
...
PST8PDT,M3.2.0,M11.1.0

$ cat /etc/sysconfig/clock 
ZONE="UTC"
UTC=true

date PHP Ruby Javaでの確認

$ date
2016年 xx月 xx日 x曜日 xx:xx:xx PST

$ php -a
php > echo date_default_timezone_get();
America/Los_Angeles

$ irb
irb(main):001:0> Time.now.zone
=> "PST"

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="UTC",...]

localtimeをAmerica/Los_Angelesに変更後Ubuntuで確認

/etc/localtimeをAmerica/Los_Angelesに変更後/etc/localtime /etc/timezoneの確認

$ cat /etc/localtime
...
PST8PDT,M3.2.0,M11.1.0

$ cat /etc/timezone
UTC

date PHP Ruby Javaでの確認

$ date
xx xx:xx:xx PST 2016

$ php -a
php > echo date_default_timezone_get();
America/Los_Angeles

$ irb
irb(main):001:0> Time.now.zone
=> "PST"

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="UTC",...]

Javaに変更したTimeZoneを適用

JavaのTimeZone出力では/etc/localtimeを変更しただけではTimeZoneが変更されませんでした。
Amazon Linux AMIでは/etc/sysconfig/clock、Ubuntuでは/etc/timezoneも変更します。

Amazon Linux AMIの場合は/etc/sysconfig/clockを変更します。

$ sudo vim /etc/sysconfig/clock 
ZONE="America/Los_Angeles"
UTC=true

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="America/Los_Angeles",...]

Ubuntuの場合は/etc/timezoneを変更します。

$ sudo vim /etc/timezone
America/Los_Angeles

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="America/Los_Angeles",...]

またUbuntuの場合はdpkg-reconfigure tzdataをすることで/etc/localtime /etc/timezoneの両方を同時に設定もできます。

スクリーンショット 2016-12-22 12.00.28.png

$ dpkg-reconfigure tzdata
# 上記設定画面が表示されAmerica/Los_Angelesを設定

# Java System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="America/Los_Angeles",...]

結果

TimeZoneを変更する際には/etc/localtimeの他にAmazon Linux AMIでは/etc/sysconfig/clock Ubuntuでは/etc/timezoneを変更する必要がありそうです。

2
1
1

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
2
1