Объект JavaScript Date
JavaScript отслеживает время в UTC внутренне, но обычно принимает вход и выход в локальное время компьютера, на котором он запущен. У этого нет никаких средств для работы со временем в других часовых поясах. Вы можете анализировать и выводить даты, которые являются UTC или Local, но вы не можете напрямую работать с другими часовыми поясами.
Чтобы быть абсолютно точным, внутреннее представление объекта Date
- это единственное число, представляя количество миллисекунд, прошедших с момента 1970-01-01 00:00:00 UTC
, независимо от секунд прыжка. В объекте Date нет часового пояса или строкового формата. Когда используются различные функции объекта Date
, локальный часовой пояс компьютера применяется к внутреннему представлению. Если функция выдает строку, тогда локальная информация компьютера может быть принята во внимание, чтобы определить, как создать эту строку. Информация зависит от каждой функции, а некоторые из них специфичны для реализации.
К счастью, есть библиотеки, которые могут это сделать. Они реализуют стандартную базу данных о часовых поясах Olson / IANA в JavaScript. У некоторых есть накладные расходы, если вы работаете в веб-браузере, так как база данных может быть немного большой, если вы хотите все это. К счастью, многие из этих библиотек позволяют выборочно выбирать зоны, которые вы хотите поддерживать, делая размер данных более приемлемым. Некоторые из них используют современные функции для получения данных о часовых поясах из API Intl
, а не для их отправки.
Для этого есть несколько библиотек:
Luxon, вероятно, является самой безопасной ставкой для всего современного использования и является самым легким весом, поскольку он использует API Intl
для его данные о часовом поясе.
Момент-часовой пояс является расширением moment.js и приводит к его собственным данным часового пояса.
js-joda - это JavaScript реализация Joda-Time API (с Java) и включает поддержку часового пояса через отдельный модуль.
BigEasy / TimeZone также находится на правильном пути.
WallTime- js достиг конца жизни , а владельцы мигрируют в момент-время.
TimeZoneJS был вокруг самого длинного, но, как известно, имеют некоторые давние ошибки, особенно при переходах на летнее время. Надеюсь, они будут исправлены в какой-то момент в будущем.
tz.js также существует некоторое время, но не очень хорошо документировано, IMHO.
Вы должны оценить эти библиотеки, чтобы увидеть, что будет отвечать вашим потребностям. Если вы не уверены, перейдите с моментом / моментом-временем.
Если вы можете ограничить свое использование в современных веб-браузерах, теперь вы можете сделать следующее без каких-либо специальных Библиотеки:
new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
Это не комплексное решение, но оно работает для многих сценариев, которые требуют только преобразования вывода (от UTC или местного времени до определенного часового пояса, но не в другом направлении). Это часть API интернационализации ECMAScript (ECMA-402). Подробнее см. В этой записи . Эта таблица совместимости отслеживает, какие версии поддерживаются. Это API Intl
, упомянутый выше, что некоторые библиотеки теперь используют внутренне.
Попробуйте вставить этот код:
Charset VARCHAR2(20);
BEGIN
SELECT UTL_I18N.MAP_CHARSET(VALUE)
INTO Charset
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';
UTL_HTTP.set_header(v_request, 'Content-Type', 'text/html; charset='||Charset);
Я не знаком с REST, я не знаю, требуется ли и правильная text/html;
.
Обновление
Я просто вижу набор символов вашей базы данных AR8ASMO8X
, который не имеет никакого имени IANA (по крайней мере, не в соответствии с Oracle UTL_I18N.MAP_CHARSET
)
UTL_HTTP.set_header(v_request, 'Content-Type', 'text/html; charset=UTF-8');
UTL_HTTP.begin_request(CONVERT(v_url,'AL32UTF8'));
Скорее всего, сервер вернет ответ в UTF-8 - будет наиболее распространенным, в противном случае проверьте заголовок ответа.
Тогда попробуйте это:
UTL_HTTP.SET_BODY_CHARSET(v_response, 'AL32UTF8');
Помимо всего вышеперечисленного, у вас также может быть проблема display , то есть внутри Oracle все будет хорошо, просто ваш клиент не может отобразить правильные символы см. в . OdbcConnection возвращает китайские иероглифы как «?»
.