象と戯れ

 | 

2011-10-14

PostgreSQLで時差を計算する

18:49 | PostgreSQLで時差を計算する - 象と戯れ を含むブックマーク はてなブックマーク - PostgreSQLで時差を計算する - 象と戯れ

最近は大陸間で電話することが多くて「今あっち何時?」的な脳みそが足りない自分は苦労するわけです。タイムゾーンで時差を教えてくれる手っ取り早い方法がPostgreSQLに内蔵されたOlson Databaseをつつくこと。

-- PDT (Pacific Daylight Time)で何時だっけ?
SELECT timezone('PDT', '2011-10-17 15:40:00');
      timezone       
---------------------
 2011-10-16 23:40:00
(1 row)

-- その9時間後は?
SELECT timezone('PDT', '2011-10-17 15:40:00 JST'::timestamptz + interval '9 hours');
      timezone       
---------------------
 2011-10-17 08:40:00
(1 row)

タイムゾーンの指定の仕方はpg_timezone_names/pg_timezone_abbrevsから。

TABLE pg_timezone_names;
TABLE pg_timezone_abbrevs;

Olsonデータはだいぶ昔から採用しているみたいですが、実装はまるで最近のFDWですね。

余談ですが、世界で一番早く朝を迎えるのはどこでしょう。

SELECT * FROM pg_timezone_names ORDER BY utc_offset DESC LIMIT 3;
        name        | abbrev | utc_offset | is_dst 
--------------------+--------+------------+--------
 Etc/GMT-14         | GMT-14 | 14:00:00   | f
 Pacific/Kiritimati | LINT   | 14:00:00   | f
 Pacific/Chatham    | CHADT  | 13:45:00   | t
(3 rows)

KiritimatiGMT+14ってフライングしすぎ。

というわけで、時間の計算は下手なアプリをダウンロードするよりpsqlの方がよっぽど早い。ぜひお試しあれ。

pgsqlpgsql2011/10/14 19:22AT TIME ZONE 演算子も使ってあげてね!

umitanukiumitanuki2011/10/14 21:44そうそう、それもあった!

 |