2017-07-28 7 views
2

PostgreSQLは、古典的なtzdataデータベースを使用して、タイムゾーンを処理するのに優れています。postgresql - タイムゾーンの過去および未来のオフセットの変更のリストを抽出する方法

サーバが異なるタイムゾーン間の過去と未来のタイムスタンプを変換することができ、tzdataの中のルール(オフセット、DSTの変更、...)

を以下のは簡単で効率的な方法は、与えられた時間帯のため、ありと与えられましたタイムゾーン変更イベントが発生したときに、その範囲内のすべてのタイムスタンプを抽出しますか?

結果には、zdump linuxコマンドの出力に相当するものが含まれているはずです。

zdump -v /usr/share/zoneinfo/America/Los_Angeles | grep 2017 

Sun Mar 12 09:59:59 2017 UTC = Sun Mar 12 01:59:59 2017 PST isdst=0 gmtoff=-28800 
Sun Mar 12 10:00:00 2017 UTC = Sun Mar 12 03:00:00 2017 PDT isdst=1 gmtoff=-25200 
Sun Nov 5 08:59:59 2017 UTC = Sun Nov 5 01:59:59 2017 PDT isdst=1 gmtoff=-25200 
Sun Nov 5 09:00:00 2017 UTC = Sun Nov 5 01:00:00 2017 PST isdst=0 gmtoff=-28800 
+0

それはpostrgresにする必要がありますか?これをアプリケーションコードで行う方が簡単かもしれません。 –

+0

私はむしろ1カ所ですべてを持っていて、簡単にジョインをすることができます。興味深い。 –

答えて

1
select d::date 
from (
    select 
     d at time zone 'America/Los_Angeles' as la, 
     lead(d at time zone 'America/Los_Angeles') over (order by d) as la_, 
     d 
    from generate_series (
     '2017-01-01'::timestamp, 
     '2017-12-31', '1 day' 
    ) gs (d) 
) s 
where la::time <> la_::time; 
    d  
------------ 
2017-03-12 
2017-11-05 
+0

これにより、日付が表示されます(正と負のオフセットでは機能しますか?)が、修正が行われたときの正確なタイムスタンプは表示されません。セリで時間/秒を使用すると効率的でしょうか? –

関連する問題