2017-11-29 11 views
1

私は、PostgreSQLがデータタイプtimestampを保存する生の方法を理解しようとしています。私は、私が使用するクライアントに応じて、2つの異なる結果を得る:psqlインタフェース以来PostgreSQLのSQLタイムスタンプ

1. psqlの

# SELECT date_incorporated FROM client; 

    date_incorporated  
------------------------ 
2017-06-14 19:42:15-04 

2. records Pythonモジュール

rows = db.query('SELECT date_incorporated FROM client') 
print(rows[0]) 
# {"date_incorporated": "2017-06-14T19:42:15-04:00"} 

をし、 recordsモジュールは両方とも私は生データを元に戻して、私はなぜ彼らが戻って彼らが保存したタイムスタンプの異なるフォーマットを返すのか理解できません。私がこれまで見

2つの違いもT「はrecordsバージョンでの日付と時刻の間の中間での、それは文字列の最後にタイムゾーンを示している異なる方法です

そのうちの1人が変更していますか?どちらが実際のデータを表示していますか?

+1

レコードは明らかにデフォルトのPostgresの形式とは異なり、独自のタイムスタンプ形式を使用しています。しかし、両方の文字列は同じタイムスタンプを表します。 – clemens

答えて

1

https://www.postgresql.org/docs/current/static/datatype-datetime.html

すべての時間帯付きの日付と時刻はUTCで内部的に保存されます。それらは TimeZone 設定パラメータで指定されたゾーンでローカル時刻に変換されてから、クライアントに表示されます。

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT

日付/時刻型の出力形式は、4つの スタイルISO 8601、SQL(Ingres)、伝統的なPOSTGRES(Unixの日付 形式)のいずれかに設定することができ、またはドイツ人。デフォルトはISO形式です。

EG:その時は、それが返される方法ではありません保存されている

t=# select now(); 
       now 
------------------------------- 
2017-11-29 09:07:31.716276+00 
(1 row) 

t=# set datestyle to SQL; 
SET 
t=# select now(); 
       now 
-------------------------------- 
11/29/2017 09:07:52.341416 UTC 
(1 row) 

。少なくともneseserely。クライアントに戻す方法は、あるレベルまで制御できます。 psqlは時間を処理しません。 pythonはありません。ない、私は信じてrecordsしかしpython自体

https://en.wikipedia.org/wiki/ISO_8601

Tは 表現の時間コンポーネントの前に時間指定子です。

そして、(あなたが意図的to_charで日付をフォーマットしていない限り)Tがdefinetelyのpostgres自体によって追加されていないこと

関連する問題