web-dev-qa-db-ja.com

PostgreSQLのローカルタイムゾーンオフセット

私のWebアプリは、タイムゾーンなしですべてのタイムスタンプをUTCで保存します。最近のログインのリストを返すシェル/ psqlスクリプトがあり、そのスクリプトでサーバーのローカルタイムゾーンでのログイン時刻を表示します(サーバーの場所や夏時間によって異なる場合があります)。

データベースサーバーのタイムゾーンとUTCの差を表す間隔を取得するために、現在このハックを使用しています。

SELECT age(now() at time zone 'UTC', now());

それは機能しますが、もっと簡単な方法はありますか?

有効なタイムゾーン文字列を返す「timezone」というサーバー構成パラメーターがありますが、クエリでこれらのパラメーターにアクセスすることはできないと思います。 (これは別の質問だと思いますが、これに答えるとタイムゾーンの問題が解決します。)

33
TimH
SELECT  current_setting('TIMEZONE')

これはクエリで使用できますが、数値的な違いはありません。

あなたの解決策は大丈夫です。

53
Quassnoi

秒数の差を整数として取得するために、私は単純に以下を使用しました:

select extract( timezone from now() );
8
shaunc