2017-04-20 19 views
0

一部の表では、「日付」データ型が使用されています。古いシステム(psql 9.1/PHP5.3)では、日付がデータベースに格納されると、その日付が正しく格納されます。しかし、新しいシステム(psql 9.6/PHP 7.1)では、日付が正しく格納されませんでした。旧システムでは7/13/10を格納する際に、例えば、それは次のように格納されますポストグルで「日付」データ型を使用すると、日付表示が正しく表示されない

stage_date |  to_timestamp 
------------+------------------------ 
1279004400 | 2010-07-13 00:00:00-07 

新しいシステムで同じ日付を格納するとき、それは次のように格納されます

stage_date |  to_timestamp 
------------+------------------------ 
1278979200 | 2010-07-12 17:00:00-07 

両方オペレーティングシステムは「America/Los_Angeles」に設定されています。古いデータベースは "localtime"(9.1ではシステムのタイムゾーンを使用する)を使用するように設定されています。新しいデータベースは "PDT"を使用します。

新しいシステムで古いシステムの値を "1279004400"と "1278979200"に設定する原因は何ですか?テーブル定義の

パート:誰がここで終わる

Column |   Type  
--------------+--------------------- 
id   | integer    
stage_date | date     
+0

何時間帯クライアントの使用.. 'ショータイムzone' –

+0

?。 – DevR

+1

タイムゾーンの混乱を避けるために 'timestamptz'を使用することをお勧めしますが、あなたが理解できない場合はおそらく –

答えて

0

場合:テーブルビューはエポックに日付を変換するために、抽出機能を使用していました。 extractの動作はPostgreSQLバージョン9.2で変更されました。

この変更により、リリース7.3で行われた不公平な変更が取り消されます。 の結果がタイムゾーンの設定に依存していたため、UTCの深夜からの測定は一致しませんでした。タイムゾーンのないタイムスタンプ の計算は行わないでください。以前の動作 は、時間値 zoneを使用して入力値をタイムスタンプにキャストすることで利用可能です。

詳細は、次の質問に対する回答をご参照ください:クライアントがPDTを使用しています Different results for extract epoch on different PostgreSQL servers

関連する問題