postgresql 8.3を使用していますが、特定のタイムスタンプ(テーブルの列)のタイムゾーンを知りたいです。
ドキュメントで、キーワード「タイムゾーン」を見つけました
しかし、私はそれを表の列に適用する方法を理解していません。出来ますか ?
postgresql 8.3を使用していますが、特定のタイムスタンプ(テーブルの列)のタイムゾーンを知りたいです。
ドキュメントで、キーワード「タイムゾーン」を見つけました
しかし、私はそれを表の列に適用する方法を理解していません。出来ますか ?
テーブルct
にタイプを持つという名前の列があると仮定します。次に、次を使用できます。TIMESTAMPTZ
t
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
タイムゾーンのオフセットを秒単位で取得します。/3600
からあなたに与えるそれは、、または何でも意味します。返される値は、設定によって異なります。UTC
GMT
GMT+1
CET
TIMEZONE
サンプル(私はドイツに住んでいます、実際のタイムゾーンはGMT+1
/CET
です):
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 18:00:00+01
test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 17:00:00+00
ご覧のとおり、設定されたタイムゾーンで常に何でも出力します。したがって、取得するオフセットは設定EXTRACT(TIMEZONE FROM ...)
によって異なりますTIMEZONE
。与えられたタイムゾーンINSERT
は、保存する価値がないため失われます。重要なのは、すべてが正しく、TIMEZONE
設定に依存してはならないということです。PostgreSQLはそれを非常にうまくやっています。
「PostgreSQL はそれを非常にうまく行っています。」
私は PostgreSQL が本当に好きですが、この特定の機能ではうまくいきません。タイムゾーンは GMT に対するオフセットだけではありません。タイムゾーンは、夏時間を意味する政治的規則に厳格です。同じオフセットと異なる夏時間ルールを持つタイムゾーンがたくさんあるため、PG が元のタイムゾーンを忘れると、実際には情報が失われます。
個人的には、元のタイムゾーンを「America/New_York」の形式で重要な日付に分けて保存しています。誰かがより良い解決策を持っているなら、それは大歓迎です。
Postgres では、datetime 値をタイム ゾーンデータ型のタイムスタンプに保存しても、元の入力タイム ゾーンが失われます。
欠点:
人々が世界中で Facebook アプリを使用する日時のデータ (タイムゾーン情報と共に) があるとします。これらの値をタイム ゾーンデータ型のタイムスタンプに保存します。あるランダムな日、人々が FB アプリを朝と夜に比べてどれだけ頻繁に使用しているか、そして同じ傾向が国全体で見られるかどうかを確認したいと思います。しかし、待ってください。タイムゾーン情報はもうありません。DC に座っていると、EST の午前 10 時に活動が世界中でどのように拡大したかがわかります。
利点:
同じタイムゾーンのタイムスタンプを持つ 2 つのデータソースを比較しているが、一方はローカル ウォッチが表示していたものとして保存され、もう一方は UTC に変換して保存された場合。ここでできることは、タイムスタンプをtimestamptzデータ型に保存し、それがどのタイムゾーンに属しているかを伝えるだけで、簡単に比較できます。
たとえば
、PST タイムゾーンのアクティビティが に記録されました2014-10-19 10:23:54
。現在、2 つの別個のデータ ソースが別々に格納されています。Datasource1 は として保存し2004-10-19 10:23:54 PST
、Datasource2 は として保存しました2014-10-19 18:23:54 UTC
。それらがtimestamptzデータ型に格納されている場合、同じ時刻が表示されます
SELECT datasource1.time, datasource2.time
timestampz は ZULU/GMT 時間の瞬間に記録され、オフセットが変更されることはないため (参照であるため)、タイムゾーンを記録する必要はありません。過去、現在、または未来のGEOPOLITICALタイムゾーンオフセットにオフセットを加算/減算するだけです。
過去および現在の目的のために、現時点で時間が適用される場所で有効な正確な地理的タイムゾーンを知る必要があります。
時間の目的での将来のインスタンスでは、これはおそらくより問題になります。それでも動作するはずです。夕日を思い浮かべてください。ある場所の地球に日没 @ 真夜中のズールー時間 (北半球の大西洋またはカナダ北部から冬のアラスカまでのどこか) があり、その時間はその場所の午後 8 時 ( -4:00 オフセット) であると想定されます。システムに記録し、「winter-date-in-future 8:00 PM」として記録すると、データベースでは 24:00 GMT として記録されます。
さて、地球上のその場所は、*ss を毛づくろいし、地理的に関連する時間の計算に鼻を鳴らし、そのタイム ゾーンを「+11:55」と呼びます。したがって、イギリスの真夜中 (GMT 真夜中) を午前 11 時 55 分と呼びたいのは、完全に彼らの選択です。コンピュータがその場所 (つまり、その地理的タイムゾーン) の将来の日付を表示したい場合、太陽が沈んでいる場合でも、午前 11 時 55 分と呼びます。そしてもちろん、それはあなたが計画した日の前日になります:-)彼らの問題。