改めて整理しようと思ったきっかけ
基礎的な知識だけど、サーバやDBなどの設定を間違えると、「タイムスタンプ」で判定する処理が意図しない動作をすることがあるので。
実際そういうことが身の回りであったので...
「タイムゾーン」とは
「同じ標準時を利用する地域や区分」のこと。
例えば日本であれば、「グリニッジ標準時+9時間」が標準時となっており、韓国やインドネシア東部と同じタイムゾーンとなっている。
よくみる「JST」「GMT」「UTC」ってなに?
JST(Japan Standard Time: 日本標準時)
日本で使われている標準時。「東経135度、兵庫県明石市」...っていうやつ。
GMT(Greenwich Mean Time: グリニッジ標準時)
イギリスのグリニッジ天文台を基準とする標準時。
日本標準時は、GMT+9:00H。
UTC(Universal Time, Coordinated: 協定世界時)
GMTだと、長く使った場合数秒のズレが生じるらしい。
それを解消するために、人工的に調整された時間。
サーバやDBに設定されているタイムゾーン
サーバやDBにも、それぞれタイムゾーンが設定される。
Linuxサーバ
dateで現在の時刻を確認すると、設定されているタイムゾーンが確認できる。
$ date
2019年 1月 12日 土曜日 22:51:52 JST
PostgreSQL
select now()で現在の時刻を確認する。
「+09」となっていることから、JSTのタイムゾーンが考慮された時刻が設定されていることがわかる。
postgres=# select now();
now
-------------------------------
2019-01-12 23:02:14.185657+09
(1 row)
/usr/local/var/postgres/postgresql.conf
の中で、タイムゾーンが設定されている。
timezone = 'Japan'