sql >> データベース >  >> RDS >> PostgreSQL

Postgresデータベースでの独特のタイムゾーン処理

    この問題はAmazonRDSとは関係がないようです。PostgreSQLで使用されている規則に関係しています。この場合、あなたは タイムゾーン名を持っている 後方に。 'UTC-01'を意味します 'UTC+01'と書く場所
    マニュアル> :

    したがって、SET TIME ZONEに使用されるタイムゾーン文字列 (およびSHOW timezoneの表示 、それに応じて)またはAT TIME ZONE コンストラクトは反対の記号を使用します timestampに表示される内容の (with time zone )リテラル!これは、一方ではISOとSQL標準、もう一方ではPOSIXの間の非常に残念な不一致です。 (POSIXが原因だと思います。)参照:

    ただし、 'CET' または'UTC-01' どちらもまだ潜在的に間違っている 夏時間のルールを採用していないため、パリの場合
    (DSTは人類の歴史の中で最もモロニックな概念の1つです。)

    パリ(ヨーロッパのほとんどのように)は冬の間CETを使用し、夏の間CESTを使用します。 'CET'を使用したテスト たまたま11月に働いた。夏に同じことをしようとすると、間違った結果になります。

    安全のため、常にタイムゾーン名を使用してください 'Europe/Paris' 、DSTルールを考慮します。通話料金は高くなります。

    関数current_time タイムゾーン設定に必要な場合は、DSTルールが考慮されます。しかし、'UTC-01' プレーンな時間オフセットです。データ型time with time zoneを使用したことはありません またはcurrent_time そもそも。もう一度マニュアル:

    検討してください:

    SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC+01' AS plus_wrong
         , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC-01' AS minus_right
    
    SELECT '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'CET'    AS cet_winter
         , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CEST'   AS cest_summer
         , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CET'    AS cet_no_dst  -- CET wrong!
    
    SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_summer
         , '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_winter
    

    関連:




    1. 複数の昇順がMysqlで機能していません

    2. PHPにXMLをインポートして、MysqlDBに追加します

    3. 選択したデータをデータベースに挿入

    4. 教義における多対多の関係