22

Postgres type としていくつかのタイムスタンプが保存されていtimestamp without time zoneます。

タイムスタンプ2013-12-20 20:45:27を例として使用します。これが UTC タイムスタンプを表すことを意図しています。

psql でクエリを実行するとSELECT start_time FROM table_name WHERE id = 1、予想どおり、そのタイムスタンプ文字列が返されます2013-12-20 20:45:27

ただし、Node アプリケーションで node-postgres ライブラリを使用して同じクエリを実行すると、ローカル タイムゾーンのタイムスタンプが返されます: Fri Dec 20 2013 20:45:27 GMT-0600 (CST). これは Javascript の日付オブジェクトですが、既にそのタイムゾーンとして保存されています。私が本当に欲しいのは、を表す日付オブジェクト (または単なる文字列) です2013-12-20 20:45:27 GMT+0000。この時間がUTCであることはすでに知っています。

postgresql.conf ファイルの timezone パラメータを: に設定しようとしましたがtimezone = 'UTC'、結果に違いはありません。

私は何を間違っていますか?

編集

問題はこのファイルにあるようです: https://github.com/brianc/node-postgres/blob/master/lib/types/textParsers.js

Postgres から返された日付文字列にタイムゾーンが指定されていない場合 (つまり、Zまたは+06:30DB のタイム ゾーンを変更するか、このコンバーターをオーバーライドします。

4

4 に答える 4

23

古い質問を復活させるのではなく、ここでまったく同じ問題が発生したことを確認すると、型パーサーをオーバーライドして for を使用することで機能する代替ソリューションがありますtimestamp without time zone

var pg = require('pg');
var types = pg.types;
types.setTypeParser(1114, function(stringValue) {
return stringValue;
});

これにより、node-pg が値をDateオブジェクトに解析しなくなり、代わりに生のタイムスタンプ文字列が返されます。

出典:node-postgresの問題から入手

于 2014-04-06T10:32:01.190 に答える