2016-08-06 3 views
0

Я создаю с помощью 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.

Первый подход может быть:

  1. часового пояса Датчик 'Европа/Мадрид' (CEST, 2:00 дифф от UTC)
  2. Получить начало дня, используя «часовой пояс Europe/Madrid , конвертировать его в UTC и хранить в базе данных. Поле startDate будет «2016-08-05T22: 00: 00.000Z»
  3. Чтобы сохранить температуру 25 ° C в течение часа: Получите местное время («Европа/Мадрид»), например 18h, затем конвертируйте в UTC , Результат - 16 часов. Так часы.16 = 25.

В этом случае мы имеем UTC раз в день звезды, но объект часов не UTC. Это «Европа/Мадрид», и я не очень уверен в этом решении.

Любые идеи по улучшению этого дизайна?

ответ

0

Вашего дизайн должен работать, однако ваш пример 3. должен быть

{ 
    ... 
    16: 25 
    ... 
} 

Часы является смещением уважения к dateStart. Поэтому при отображении вы должны добавить 16 часов к дате начала, которую вы можете отобразить в часовом поясе, который вы хотите.

+0

Если я не ошибаюсь, используя часы в качестве смещения, то я не могу использовать статические поля, потому что разные датчики в разных часовых поясах будут иметь разные структуры внутри поля «часы». (кстати, я отредактировал пример, правильное местное время - 18 часов, а UTC - 16 часов) – Endymion