タイムゾーンを確認する
-- SQLで確認する
select current_setting('timezone') as database_timezone;
-- showコマンドで確認する
show timezone;
myposdb=# -- SQLで確認する
myposdb=# select current_setting('timezone') as database_timezone;
database_timezone
-------------------
Asia/Tokyo
(1 行)
myposdb=# -- showコマンドで確認する
myposdb=# show timezone;
TimeZone
------------
Asia/Tokyo
(1 行)
myposdb=#
-- showコマンドで確認できるって事はpostgresql.confに定義してある
-- と言う事ですね。
セッション内のタイムゾーンを変更する
SET TIME ZONE 'UTC';
-- 現在のタイムゾーン
myposdb=# select current_setting('timezone') as database_timezone;
database_timezone
-------------------
Asia/Tokyo
(1 行)
myposdb=# select current_timestamp;
current_timestamp
-------------------------------
2024-01-14 19:59:44.546419+09
(1 行)
-- セッション内のタイムゾーンをUTCへ変更
myposdb=# SET TIME ZONE 'UTC';
SET
myposdb=# select current_setting('timezone') as database_timezone;
database_timezone
-------------------
UTC
(1 行)
myposdb=# select current_timestamp;
current_timestamp
-------------------------------
2024-01-14 11:00:23.393034+00
(1 行)
-- 元のタイムゾーンへ戻す
myposdb=# SET TIME ZONE 'Asia/Tokyo';
SET
myposdb=# select current_setting('timezone') as database_timezone;
database_timezone
-------------------
Asia/Tokyo
(1 行)
myposdb=# select current_timestamp;
current_timestamp
-------------------------------
2024-01-14 20:01:14.211745+09
(1 行)
myposdb=#
タイムゾーン表記一覧を確認する
select * from pg_timezone_names t where t.name like 'Asia%'
and t.utc_offset >= '09:00:00'
order by t.utc_offset
;
-- pg_timezone_namesを参照すると確認できますがかなりの種類あります。
--
myposdb=# select count(*) from pg_timezone_names ;
count
-------
1189
(1 行)
-- 一部をサンプル表示します
-- is_dstは現状サマータイムかどうかを表します
--
myposdb=# select * from pg_timezone_names t where t.name like 'Asia%'
myposdb-# and t.utc_offset >= '09:00:00'
myposdb-# order by t.utc_offset
myposdb-# ;
name | abbrev | utc_offset | is_dst
--------------------+--------+------------+--------
Asia/Yakutsk | +09 | 09:00:00 | f
Asia/Chita | +09 | 09:00:00 | f
Asia/Seoul | KST | 09:00:00 | f
Asia/Dili | +09 | 09:00:00 | f
Asia/Tokyo | JST | 09:00:00 | f
Asia/Jayapura | WIT | 09:00:00 | f
Asia/Khandyga | +09 | 09:00:00 | f
Asia/Pyongyang | KST | 09:00:00 | f
Asia/Vladivostok | +10 | 10:00:00 | f
Asia/Ust-Nera | +10 | 10:00:00 | f
Asia/Magadan | +11 | 11:00:00 | f
Asia/Srednekolymsk | +11 | 11:00:00 | f
Asia/Sakhalin | +11 | 11:00:00 | f
Asia/Kamchatka | +12 | 12:00:00 | f
Asia/Anadyr | +12 | 12:00:00 | f
(15 行)
myposdb=#
- timestamp
with time zone
(timestamptz
) : タイムゾーン情報もセットで格納している。実際の日付及び時刻はUTC(協定世界時)に変換して保持しており、表示時にはユーザの指定するタイムゾーンに変換し出力する。
- timestamp
without time zone
(timestamp) :タイムゾーン情報は格納していないので全て同一のタイムゾーンで解釈する。timestamp と省略した場合は 「timestamp without time zone
」となる。