Я создаю с помощью node.js и mongodb приложение, которое хранит все значения температуры по часам в день. Значения температуры должны отображаться на приборной панели в соответствии с часовым поясом, где расположен датчик. Я создал модель данных, следуя рекомендации для данных временных рядов, но я не знаю, как бороться с часовым поясом, потому что mongodb хранит даты в UTC, поэтому в моей модели данных объект «часы» имеет статические поля для каждого часа дня.Обработка данных временного ряда Mongodb и обработка часового пояса
// Temperatures by hour in a day.
{
dateStart: ISODate("2016-08-06T00:00:00.000Z"), // This is the start of the day
timeZone: "Europe/Madrid", // We could store the time zone of the sensor.
hours: { // I'm not sure how to deal with these values. Should be UTC hours too?
0: 20
1: 21,
2: 24,
.
.
.
23: 16
}
}
Вопрос: как я могу иметь дело с часовым поясом?
В мое местное время начало дня (2016-08-06T00: 00: 00) преобразуется в UTC по 2016-08-05T22: 00: 00.000 + 02: 00.
Первый подход может быть:
- часового пояса Датчик 'Европа/Мадрид' (CEST, 2:00 дифф от UTC)
- Получить начало дня, используя «часовой пояс Europe/Madrid , конвертировать его в UTC и хранить в базе данных. Поле startDate будет «2016-08-05T22: 00: 00.000Z»
- Чтобы сохранить температуру 25 ° C в течение часа: Получите местное время («Европа/Мадрид»), например 18h, затем конвертируйте в UTC , Результат - 16 часов. Так часы.16 = 25.
В этом случае мы имеем UTC раз в день звезды, но объект часов не UTC. Это «Европа/Мадрид», и я не очень уверен в этом решении.
Любые идеи по улучшению этого дизайна?
Если я не ошибаюсь, используя часы в качестве смещения, то я не могу использовать статические поля, потому что разные датчики в разных часовых поясах будут иметь разные структуры внутри поля «часы». (кстати, я отредактировал пример, правильное местное время - 18 часов, а UTC - 16 часов) – Endymion