Проблема с Javascript Date Daylight Time Saving и oracledb-node - PullRequest
0 голосов
/ 09 мая 2020

У меня проблемы с извлечением поля DateTime из базы данных с использованием драйвера oracledb-node.

У меня в базе данных две записи с таким полем DateTime.

# |MY_DATE            |SESSIONTIMEZONE
1 |2020-05-02 00:00:00|Europe/Berlin 
2 |2020-03-02 00:00:00|Europe/Berlin 

Когда я извлекаю его с помощью oracledb-node, чтобы преобразовать его в JSON, вторая запись меняет день.

Первая запись

Rest API (JSON)
"2020-05-01T22:00:00.000Z"
Javascript Date
Sat May 02 2020 00:00:00 GMT+0200 (Ora legale dell'Europa centrale)

Вторая запись

Rest API (JSON)
"2020-03-01T22:00:00.000Z"
Javascript Date
Sun Mar 01 2020 23:00:00 GMT+0100 (Ora standard dell'Europa centrale)

Полагаю, у меня проблемы с переходом на летнее время.

Может ли кто-нибудь помочь мне с правильным подходом?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2020

Согласно @ комментарий Кристофера к моему вопросу, проблема заключалась в том, что мой код node.js работал с другим часовым поясом по сравнению с тем, который установлен в базе данных oracle.

Следуя документации node-oracledb о Как получить поля Datetime , я установил переменную среды ORA_SDTZ='Europe/Berlin' в соответствии с часовым поясом базы данных.

Несколько полезных советов устранение неполадок:

Как получить базу данных Timezone

SELECT sessiontimezone FROM DUAL;

Как получить node.js Environment TimeZone

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
0 голосов
/ 09 мая 2020

Это помогает?

const dates = ["|2020-05-02 00:00:00|Europe/Berlin", "|2020-03-02 00:00:00|Europe/Berlin"];

const DateTime = luxon.DateTime;
dates.forEach(str => {
  const [, dStr, tz] = str.split("|")
  const d = DateTime.fromISO(dStr.replace(" ", "T"), {
    zone: tz
  });
  console.log(d.toISO());
  console.log(d.toUTC().toISO());
})
<script src="https://cdn.jsdelivr.net/npm/luxon@1.24.1/build/global/luxon.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...