2017-03-09 6 views
1

タイムゾーンなしのタイムスタンプを表す文字列を変換する必要があります(たとえば、「2017-03-08T20:53:05」) タイムゾーン/ UTC ')をタイムゾーンのタイムスタンプに設定します。文字列を希望のタイムゾーンでタイムスタンプに変換する方法

問題は、デフォルトのタイムゾーンが 'Etc/UTC'ではないことです。だから、私はそれがデフォルトのタイムゾーンを持つ値に文字列を変換し

SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC' 

にしようとしていたときに、その後、「その他、各種/ UTC」にローカルタイムゾーンの変換を適用します。これは何が要求されるのではありません。

基本的には、元の文字列の値が、デフォルトのローカルタイムゾーンではなく、特定のタイムゾーンでの時刻を表すことをpostgresに伝える方法を探しています。

ありがとうございます。

更新:上記の記述が実際に動作していることを確認しました。

SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC' 

私はクライアントのタイムゾーン設定によって誤解を招きました。

答えて

2

あなたは、クエリの前set time zone UTC;を実行することができます:

set time zone UTC; 
SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss')::timestamp without time zone at time zone 'Etc/UTC'; 

これはあなたの問題を解決していますか?

+0

を、ではありません。これは事実上、適切な解決策ではなく回避策です。もちろん、私はデフォルトのタイムゾーンを変更することができます。しかし、これは私が探しているものではありません。 – spoonboy

+0

期待する出力例を教えてください。 'to_timestamp(...):: timestamp without time zone'は、タイムゾーンなしのタイムスタンプを期待通りに返します。 'select'クエリの終わりにタイムゾーンがあると(例えば' + 04')、これはPostgreSQLが 'set time zone 'で制御される出力をフォーマットする方法です。 'select timeestamp with time zone'は、常に現在のセッションのタイムゾーンを出力に追加します... – SegFault

+0

これはフォーマットに関するものではありません。これは値の変換に関するものです。質問を例で更新します。 – spoonboy

2

:timestamp without time zoneが必要とされていない、ただの操作を行います。残念ながら

SELECT to_timestamp(field1, 'YYYY-MM-DD hh24:mi:ss') at time zone 'Etc/UTC' 
関連する問題