アプリケーションで複数のタイムゾーンを扱う必要があります。
基本的に、私のシステムはデータを生成し、顧客は地球上のどこからでもアクセスできます。
私のデータにはタイムスタンプが関連付けられているため、タイムゾーンを処理する次の戦略について考えました。
Postgres の場合:
::timestamptz
タイムスタンプのタイプでテーブルを作成します。タイムゾーンのないタイムスタンプは混合として許可されず、私の場合は時限爆弾のよう::timestamp
に::timestamptz
見えます.PG サーバー システムのタイム ゾーンを UTC に設定します。
設定
timezone='UTC'
しpostgresql.conf
ます (システムの TZ が UTC の場合は必要ないかもしれませんが、私は少し偏執的で、費用はかかりません)。テーブルを作成するときに次のチェックを追加します。
CONSTRAINT timestamp_must_be_utc CHECK (date_part('timezone'::text, "my_timestamp_field") = 0::倍精度)
すべてのタイムスタンプを UTC で保存する
クライアント側 (python + pytz )
次のように、顧客のタイムゾーンをプロファイルに保存する
'America/Los Angeles'
データをクエリするときにタイムゾーン情報をpostgresに送信して、
SELECT xxxx FROM yyyy WHERE my_ts >= '2012-11-27 19:13:00+01'::timestamptz
PostgresにUTCへの変換を行わせるようなものを取得できるようにします。別の方法として、変換にpytzを使用することもできますが、Postgres はこの作業をうまく行うようです。データとタイムスタンプを正しく表示できるように、顧客のタイムゾーンに従ってタイムスタンプを変換します。
要約すると、データの保存とクエリにはどこでも UTC を使用し、データを表示するときはタイムゾーン変換のみを使用する予定です。
私は Postgres とそれがタイムゾーンを処理する方法についてあまり経験がありません。異なるタイムゾーンで日付と時刻を処理するのがいかに難しいかを知っています (フライト スケジュールを扱う必要があると、UTC を使用することが日付と時刻の計算を行うための唯一の信頼できる方法であるという難しい方法を学びます) これが私が質問している理由ですこの質問により、経験豊富なpostgresユーザーが私の戦略を確認または修正できるようになります。
興味深いリンク: