データベースに可能性はありますか、GMTタイムスタンプとして保存する必要がある時間はいつでも与えられます. もしそうなら、私を共有してください。
4 に答える
timestamp with time zone
PostgreSQL の場合、テーブルには次のようなタイプ(timestamptz
略して)の列が必要です。
CREATE TABLE tbl (id serial, ts timestamptz);
保存したいもの(と呼びましょうmy_ts
)が...
ローカル 、
timestamp without time zone
つまりクライアントの現在の設定と一致しtimezone
ます:
そのまま挿入すると、すべてが自動的に内部的に UTC として保存されます:INSERT INTO tbl (ts) VALUES my_ts'
a
timestamp with time zone
:
そのまま挿入します。すべてが内部的に自動的に UTC として保存されます。INSERT INTO tbl (ts) VALUES my_ts;
a
timestamp without time zone
but from another time zone :たとえば、ロンドンのオリンピックから値
を取得しますが、クライアントは別のタイムゾーンにいると考えています。次の構文でタイムスタンプを変換します。timestamp without time zone
AT TIME ZONE
INSERT INTO tbl (ts) VALUES my_ts AT TIME ZONE 'Europe/London';
タイム ゾーン名 (この場合はタイム ゾーンの省略形ではなく) を使用するとBST
、DST (夏時間) 規則が自動的に適用されます。この関連する質問の詳細。PostgreSQL でのタイムスタンプ処理の
詳細については、この関連する回答を参照してください。
ここで、現在のタイム ゾーンに関係なくtbl.ts
UTC (~ GMT) として表示する場合timestamp without time zone
は、次のように値を取得します。
SELECT ts AT TIME ZONE 'UTC' FROM tbl;
に適用しAT TIME ZONE
た場合timestamptz
とtimestamp
! マニュアルをよく読んでください。
timestamp with time zone
(および古いスタイルの ですが、通常は使用しないでください) の時刻timestamp
は、PostgreSQL では常に UTC ("GMT") で格納されます。表示のために UTC との間で変換されます。入力と出力で UTC として扱われるようにするには、次のようにします。
SET timezone = 'UTC'
各セッションで、またはデータベースまたはユーザーレベルでパラメーターを設定します。UTC 以外の TZ にある場合、アプリはタイム ゾーンで修飾されたすべてのタイムスタンプを送信する必要があります。「現地時間」がUTCであることをシステムに伝えました。
このAT TIME ZONE
構文は、タイムスタンプをデフォルト以外のタイム ゾーンに明示的に変換する場合に役立ちます。たとえば、次のようになります。
regress=# SELECT TIMESTAMP '2012-01-01 00:00:00 UTC' AT TIME ZONE '+08:00';
timezone
------------------------
2012-01-01 16:00:00+08
(1 row)
http://dev.mysql.com/doc/refman/5.5/en/datetime.html
MySQL は、保存のために TIMESTAMP 値を現在のタイム ゾーンから UTC に変換し、取得のために UTC から現在のタイム ゾーンに戻します。(これは、DATETIME などの他のタイプでは発生しません。) デフォルトでは、各接続の現在のタイム ゾーンはサーバーの時間です。
探しているキーワードは GMT ではなく UTC です (「ほとんどの一般的な目的では、UTC は GMT と同義ですが、GMT はもはや科学界によって正確に定義されていません。」、wikipedia )。
MySQL の場合、CONVERT_TZ()関数を使用できます (指定されたタイム ゾーンに関するマニュアルの警告に注意してください。適切に設定されていないと、クエリが壊れる可能性があります)。
注意点として、MySQL とアプリケーションの間でタイムゾーン変換を行う 100% 信頼できる方法はありません (理由の詳細については、mysql タイムゾーン変換に関する私のブログ記事を参照してください)。日時文字列を UTC で MySQL に直接渡す方がよいでしょう (たとえば、アプリケーション自体で変換を行うことによって)。信頼性が必要な場合、ほとんどの場合、UTC 形式の日付文字列を使用して DATETIME フィールドに日時を格納することになります。