My Photo

« PHPメモ040:Smartyでクラスの定数を使う | Main | 2014八重山旅行記 初日 »

July 20, 2014

TIMESTAMP WITH TIME ZONE型

既存のWEBアプリケーションに対して国際化対応というか現地時間対応みたいなことをする可能性が浮上してきた。国際化なんて全く考慮してなくて、テーブルの日時のカラムは TIMESTAMP WITHOUT TIME ZONE 型だ。
TIMESTAMP WITHOUT TIME ZONE 型(以下、TZなしと記述) を TIMESTAMP WITH TIME ZONE 型(以下、TZありと記述)にキャストしたらどうなるか、やってみたメモ。
キャストの書き方は、標準SQLで書くと長いのでPostgreSQLの方言で記述。

dbtest=> \d t_test
              テーブル "public.t_test"
  カラム   |             型              |  修飾語
-----------+-----------------------------+----------
 test_id   | numeric                     | not null
 contents  | character varying(20)       |
 test_date | timestamp without time zone |
インデックス:
    "t_test_pkey" PRIMARY KEY, btree (test_id)

dbtest=> SHOW timezone;
  TimeZone
------------
 Asia/Tokyo
(1 行)

dbtest=> SELECT * FROM t_test;
 test_id | contents |      test_date
---------+----------+---------------------
       1 | abcde    | 2014-07-14 07:00:00
(1 行)

dbtest=> SELECT test_date::timestamptz FROM t_test;
       test_date
------------------------
 2014-07-14 07:00:00+09
(1 行)

dbtest=> SELECT test_id FROM t_test WHERE test_date::timestamptz = '2014-07-13 22:00:00+0000'::timestamptz;
 test_id
---------
       1
(1 行)

dbtest=> SELECT test_id FROM t_test WHERE test_date::timestamptz = '2014-07-13 15:00:00-0700'::timestamptz;
 test_id
---------
       1
(1 行)

どうやらTZなしをTZありにキャストするとDBに設定されたタイムゾーンの時間となるらしい。
上記の例なら、TZなしの 2014/07/14 07:00 をTZありにキャストすると

2014/07/14 07:00+0900(JST)
= 2014/07/13 22:00+0000(UTC)
= 2014/07/13 15:00-0700(PDT)

という風に変換される。
#上に書いた3つの時間はすべて同じ時間。表現の仕方はタイムゾーンの数だけある。

WEBアプリケーションの現地時間対応をもしするとしたら、テーブルのTZなしのカラムをTZありに変更し、合わせてコードも修正するのがまともなやり方なんだろう。
でもそんな工数は取れないだろうから、SQL文のいろんなところにキャストを入れる「なんちゃって国際化」になりそうな気がする。

« PHPメモ040:Smartyでクラスの定数を使う | Main | 2014八重山旅行記 初日 »

PostgreSQL」カテゴリの記事

SQL」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/60016189

Listed below are links to weblogs that reference TIMESTAMP WITH TIME ZONE型:

« PHPメモ040:Smartyでクラスの定数を使う | Main | 2014八重山旅行記 初日 »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof