Luxon Преобразование времени ISO UTC в определенное время timzone в миллисекундах

Я использую luxon для преобразования дат в миллисекунды в соответствии с timzone. Я получаю время в формате ISO, но когда я применяю luxon для преобразования дат, это происходит, но когда я анализирую его в миллисекундах, я не получаю разницы в миллисекундах с текущим и указанным timzone.

console.log("== Local Zone == ");
console.log(DateTime.local().zoneName);
const sd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(sd.toMillis());

console.log("== Updated Zone == ");
Settings.defaultZoneName = "America/Chicago";
console.log(DateTime.local().zoneName);
const hd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(hd.toMillis());

Любая помощь/предложение будет принята с благодарностью.


person Pramod Patil    schedule 16.11.2020    source источник


Ответы (1)


Вы получаете то же значение (1564213069211), потому что входная строка ("2019-07-27T07:37:49.211Z") заканчивается на Z, что означает смещение UTC.

Таким образом, Luxon просто учитывает смещение UTC+0 и соответствующим образом отображает результаты.

const DateTime = luxon.DateTime;
const Settings = luxon.Settings;
console.log("== Local Zone == ");
console.log(DateTime.local().zoneName);
const sd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(sd.toMillis());
const sdNoZ = DateTime.fromISO("2019-07-27T07:37:49.211");
console.log(sdNoZ.toMillis());

console.log("== Updated Zone == ");
Settings.defaultZoneName = "America/Chicago";
console.log(DateTime.local().zoneName);
const hd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(hd.toMillis());
const hdNoZ = DateTime.fromISO("2019-07-27T07:37:49.211");
console.log(hdNoZ.toMillis());
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/global/luxon.js"></script>

person VincenzoC    schedule 16.11.2020
comment
Спасибо, нам нужно удалить z из строки, чтобы получить конкретную дату часового пояса? - person Pramod Patil; 17.11.2020
comment
"2019-07-27T07:37:49.211Z" имеет полную информацию о дате, времени + часовом поясе и представляет данный момент времени (см. Конвертер часовых поясов здесь). Преобразование его в миллисекунды всегда будет показывать 1564213069211. Удаление Z приведет к удалению информации о часовом поясе, поэтому он будет представлять другой момент времени в соответствии с принятым во внимание часовым поясом. - person VincenzoC; 17.11.2020