我的数据库中有一个日期列。像这样使用 SQLDeveloper 查询时
SELECT some_date as "Some date",
cast(some_date as timestamp) at time zone 'UTC' as "Some date UTC"
FROM mytable
FETCH NEXT 1 ROWS ONLY;
在 Node 中运行这段代码时:
const oracledb = require('oracledb');
const dbConfig = {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
connectString: process.env.DB_TNSNAME,
};
oracledb.getConnection(dbConfig).then(async conn => {
const result = await conn.execute('SELECT some_date FROM mytable FETCH NEXT 1 ROWS ONLY');
console.log(result.rows[0][0]);
});
我得到这个输出:2017-11-09T21:00:00.000Z
并且在将此日期转换为本地时间时,例如使用时刻:
console.log(moment(date).format('YYYY/MM/DD HH:mm:ss'));
我得到 2017/11/09 23:00:00
所以基本上,我通过 JS 查询数据库时得到的日期似乎比通过 SQL 开发人员查询时得到的日期晚 1 小时。
我怀疑这与 NOV-09 是常规时间(所以我的本地时间是 GMT+2)以及它当前是夏令时(我的本地时间是 GMT+3)有关,但我该如何解决这个问题?
最佳答案
您试过这个 ( https://oracle.github.io/node-oracledb/doc/api.html#-16173-fetching-dates-and-timestamps ) 吗?
You can set the environment variable ORA_SDTZ before starting Node.js, for example:
$ export ORA_SDTZ='UTC'
$ node myapp.js
关于javascript - Node.js Oracle DB 日期返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64322898/