Я использую NodeJS / javascript для определения текущей даты, которая имеет часовой пояс системы. Теперь я хочу вставить эту дату в MySQL с UTC + 0. После этого я хочу снова выбрать эту дату с помощью NodeJS / javascript из MySQL с помощью UTC + 0 и вставить ее сейчас в MS SQL, где я хочу, чтобы она снова сохранялась как UTC + 0. В конце я снова выбираю с помощью NodeJS / javascript, но на этот раз из MS SQL, а также хочу, чтобы дата на этот раз находилась в часовом поясе, который используется прямо сейчас в системе, где бы я ни находился в будущем.
Вот пример: На 01.01.2018 15:00:00 UTC + 1 (немецкое зимнее время) я хочу, чтобы он хранился в обеих базах данных с UTC + 0. Когда наступает лето и часовой пояс моей системы меняется на UTC + 2 (немецкое летнее время), или я переезжаю в другую страну, например, UTC-5 Я хочу получить дату из MS SQL для преобразования в часовой пояс, который моя система использует автоматически.
Итак, вопросы:
Дополнительная информация: У меня есть две программы на NodeJS, которые общаются друг с другом. первый (клиент) вставляет дату в свою базу данных MySQL и отправляет эту дату также в серверное приложение. Причина, по которой он вставляет его в свою собственную базу данных MySQL, заключается в целях синхронизации, когда сервер не работает, чтобы получить их в другой раз. Когда сервер получает даты от клиентов, они должны храниться в базе данных MS SQL сервера. администраторы сервера могут экспортировать эти даты в Excel, когда захотят. но даты должны быть преобразованы из даты в MS SQL (UTC + 0) в часовой пояс системы серверов, чтобы в файле Excel дата находилась в часовом поясе системы вместо UTC + 0
База данных MySQL находится на стороне клиента, и я хочу отправить эти даты с помощью NodeJS на сервер с базой данных MS SQL. Даты в базе данных MS SQL будут позже экспортированы в файл Excel на стороне сервера с часовым поясом серверной системы.
Что вы имеете в виду, что ваш MySQL находится на стороне клиента? Можете ли вы описать проблему с точки зрения пользователя, в настоящее время это выглядит как проблема XY.
я обновил вопрос выше
Я думаю, что в этом решении можно сделать некоторые оптимизации, но сначала я отвечу на ваши вопросы.
How can I insert my date from NodeJS with the systems time zone to MySQL with UTC+0?
Вы получаете системный часовой пояс, используя new Date()
- чтобы преобразовать его в формат UTC, который MySQL поймет, вы можете сделать new Date().toISOString()
Чтобы сохранить это значение в MySQL, вам понадобится поле DateTime. Просто вставка этого значения должна работать, но если это не просто синтаксический анализ, это будет дата.
How can I select this date, so that I can insert it with NodeJS into the MS SQL and it's UTC+0 there too?
Ну, вы вставили его в стандартном формате, который всегда UTC + 0. Вы просто выбираете его и вставляете так же.
How can I select the date from MS SQL with NodeJS so that it has the systems time zone again?
Итак - у вас есть поле DateTime в MS SQL, которое вы будете запрашивать через Node.JS - поле находится в UTC + 0, и вы хотите получить это время соответственно для часового пояса вашего сервера?
Что ж, если вы используете new Date().getTimezoneOffset()
, это должно дать вам смещение вашего часового пояса. Так должно получиться примерно так:
var date = MSSQLWrapper.someOperation('select d_field from ...');
var offset = new Date().getTimezoneOffset(); // Your offset
date.setHours(date.getHours() + offset); // Add your offset
console.info(date) // your aligned date.
Редактировать
Если вы хотите изменить часовой пояс при выборе из SQL, вы можете использовать В ЧАСОВОЙ ПОЯС
SELECT your_date from your_table
AT TIME ZONE 'Eastern Standard Time' AS my_new_date
Вы можете передать название часового пояса в запросе со стороны сервера.
или, в качестве альтернативы, вы можете проверить TODATETIMEOFFSET
В этом вопросе также есть несколько хороших примеров: Преобразование значения datetime из одного часового пояса в часовой пояс UTC с помощью запроса sql
Есть ли способ обрабатывать преобразования в запросе sql, чтобы я уже выбрал правильный часовой пояс? Другой вопрос: когда я вставляю в MySQL, MySQL автоматически конвертирует дату в UTC, и если да, то в каком часовом поясе она отображается, когда я выбираю дату?
Спасибо, но вы явно ввели восточное стандартное время, но это может быть восточное летнее время или даже другой часовой пояс. Вот почему я хочу, чтобы он совпадал с часовым поясом системы.
@ T.Yueksel Я понимаю - альтернативой было бы передать это имя в запросе с вашего сервера при запросе (это если вы хотите выполнить преобразование в своем SQL, а не в своем коде) В противном случае я не думаю, что вы есть другая альтернатива, кроме как выполнить преобразование в коде (что нормально)
Конечно! @ T.Yueksel Я был бы признателен за зеленую галочку, если это решит вашу проблему;)
Используйте момент js и его Функция UTC. Таким образом, вам не нужно будет обрабатывать часовые пояса.
Привет
Доминик
Вы имеете в виду, что когда наступит переход на летнее время, вам понадобится автоматическое преобразование часового пояса? Немного дополнительных разъяснений может помочь: насколько активно участвует пользователь, будет ли пользователь запускать этот запрос или вы ищете работу демона сервера?