Как рассчитать день недели из отметки времени?(DST), - PullRequest
1 голос
/ 05 января 2012

Я разрабатываю код для устройства, на котором библиотека даты и времени недоступна (примечание: поплавки также недоступны), поэтому я должен выполнить math myslef.

Моя временная метка - секунды с 1 января 2000 года (в UTC).В конфигурации устройства у меня есть:

  • текущий часовой пояс как количество часов +/- от UTC
  • dst как количество часов для добавления

Iнужно знать:

  • текущий день недели
  • текущий час

Расчет текущего часа довольно прост:

timestamp % 86400 # seconds from midnight

Расчет дня недели (1-понедельник, 7-воскресенье):

dayofweek = (timestamp - 86400) % (86400*7) / 86400
if dayofweek = 0:
    dayofweek = 7

примечания:

  • 86400 = секунд за один день

Но перед расчетами я должен: 1. добавить часы часового пояса 2. добавить часы DST

Проблема в том, как рассчитать, следует ли добавлять часы DST (только для европейского летнего времени) или нет?Я должен сделать это эффективно, потому что у меня очень ограниченная вычислительная мощность, и мне нужно сделать это как можно быстрее: -)

1 Ответ

0 голосов
/ 05 января 2012

Чтобы определить, применяется ли DST, вам также необходимо знать день и месяц.В Европе изменение происходит в последние выходные марта / последние выходные октября.Рекомендуется применить смещение часового пояса без перехода на летнее время, выполнить расчеты, чтобы получить часы, день недели, день и месяц, а затем, если вы находитесь в летнее время, вам может потребоваться настроить любое или все эти значения (в зависимости от исходного значениячас, это может быть только час, который нужно отрегулировать).

Делая сначала смещение часового пояса, вы получаете правильные значения местного часа / дня недели / дня без DST, затем регулировка DST тривиальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...