2017-05-26 13 views
-1

UTCのタイムスタンプの「作成済み」フィールドを複数のテーブルに入れたいのですが。Postgres UTCタイムスタンプ?

ts TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),は、タイムゾーンと私にローカル時間を与える:

foo=# select ts from messages; 
       ts    
------------------------------- 
2017-05-26 11:54:07.532796+01 
2017-05-26 11:54:08.536241+01 
2017-05-26 11:54:09.538119+01 
2017-05-26 11:54:10.541089+01 
2017-05-26 11:54:11.543262+01 

ts TIMESTAMP NOT NULL DEFAULT now(),は私のタイムゾーン情報(危険)なしのローカルタイムを提供します:

foo=# select ts from messages; 
      ts    
---------------------------- 
2017-05-26 11:56:00.134596 
2017-05-26 11:56:01.13798 
2017-05-26 11:56:02.140586 
2017-05-26 11:56:03.143076 
2017-05-26 11:56:04.14565 

Whatフィールドの定義は私に次のようになります、コードがUTC以外のタイムゾーン(BST、British Summer Timeなど)でサーバー上で実行される場合:

foo=# select ts from messages; 
      ts    
---------------------------- 
2017-05-26 10:56:00.134596+00 
2017-05-26 10:56:01.13798+00 
2017-05-26 10:56:02.140586+00 
2017-05-26 10:56:03.143076+00 
2017-05-26 10:56:04.14565+00 

さえ:他に何もできない場合

foo=# select ts from messages; 
      ts    
---------------------------- 
2017-05-26 10:56:00.134596 
2017-05-26 10:56:01.13798 
2017-05-26 10:56:02.140586 
2017-05-26 10:56:03.143076 
2017-05-26 10:56:04.14565 

は、罰金になります(注:時間は午前10時のUTCはなく、上記の両方の例では午前11時のBSTです)。タイムゾーンと

+1

タイムスタンプを行います。クライアントのタイムゾーンが時間を操作し、その値がUTCに変換されてサーバーに保存されます。 postgresはすべてのタイムスタンプをUTCに保ちます –

答えて

2

タイムスタンプはあなたの選択です:

t=# select now(); 
       now 
------------------------------- 
2017-05-26 11:04:19.240294+00 
(1 row) 

t=# set timezone to 'EET'; 
SET 
t=# select now(); 
       now 
------------------------------- 
2017-05-26 14:04:45.749123+03 
(1 row) 

いますが、今の選択に挿入した場合()、それはあなたがチェックすることができUTCの時間節約になります。

t=# select now() at time zone 'utc'; 
      timezone 
---------------------------- 
2017-05-26 11:05:01.045544 
(1 row) 

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-TIMEZONES

タイムゾーン対応のすべての日付と時刻は、UTCで内部的に格納されます。それらは TimeZone 設定パラメータで指定されたゾーンでローカル時刻に変換されてから、クライアントに表示されます。

+0

もう一度ありがとうございます。私は、Postgresがローカライズされた時間を保存するのではなく、クライアントに(クライアントに)ローカライズされた時間を与えていることを理解していませんでした。 – fadedbee

関連する問題