A5:SQL Mk-2

開発のこと、日々のこと

DBに設定されたタイムゾーンでの日付型の出力

ホーム フォーラム A5:SQL Mk-2掲示板 DBに設定されたタイムゾーンでの日付型の出力

このトピックには1件の返信が含まれ、2人の参加者がいます。1 ヶ月前 松原正和 さんが最後の更新を行いました。

2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • #3353 返信

    かやはら

    お世話になります。
    日付型(Timestamp型)の表示について質問させていただきたいです。

    【環境】
    ・Postgres 9.6
    ・OS:Windows 7 or 10 64bit

    ■事象
    タイムゾーン有の時刻型(TIMESTAMP WITH TIME ZONE)にUTCで入力した文字が
    ソフトウェアにて確認するとOSのタイムゾーン(JST)にて表示される。

    OSで設定されたタイムゾーンではなく、DBに設定されたタイムゾーンをみて出力する方法をご教示いただきたい。

    #3379 返信

    松原正和
    キーマスター

    かやはらさんこんにちは。
     
    TIMESTAMP WITH TIME ZONEは、タイムゾーンの情報(+09とか)付きで日付時刻を保持するというより、タイムゾーンを適宜変換して扱ってくれる型です。
     
    https://www.postgresql.jp/document/9.4/html/datatype-datetime.html によると、以下のような入出力の動作をします。
     
    >timestamp with time zoneについて内部に格納されている値は常にUTCです(協定世界時、歴史
    >的にグリニッジ標準時GMTとして知られています)。 時間帯が明示的に指定された入力値は、その
    >時間帯に適したオフセットを使用してUTCに変換されます。 入力文字列に時間帯が指定されていな
    >い場合は、システムのTimeZoneパラメータに示されている値が時間帯とみなされ、timezone時間
    >帯用のオフセットを使用してUTCに変換されます。
     
    >timestamp with time zone値が出力されると、この値はUTCから現行のtimezoneに変換され、そ
    >の時間帯のローカル時間として表示されます。 他の時間帯での時間を表示するには、timezoneを
    >変更するか、あるいはAT TIME ZONE構文(項9.9.3 を参照)を使用します。
     
     
    つまり、クライアントで入力した日付時刻はタイムゾーンを考慮してUNIZ TIME(多分)などに変換されて格納され、別のクライアントからクエリーされたときはそのクライアントのタイムゾーンに合わせた形で日付時刻表現に変換されて表示されます。
     
    例えば、タイムゾーンが UTC のクライアントで 2018/11/11 0:00:00 を挿入(又は更新) した場合、 日本(JST)のクライアントでクエリーすると 2018/11/11 9:00:00 として表示されます。
     
    ちなみに、to_char(current_timestamp, ‘YYYY/MM/DD HH24:MI:SS TZ’) 等とすると、to_char()は当然サーバーで処理されることになるので、サーバーのタイムゾーンで文字列に変換されることになるようです。

2件の投稿を表示中 - 1 - 2件目 (全2件中)
返信先: DBに設定されたタイムゾーンでの日付型の出力
あなたの情報:




コメントは受け付けていません。