2012-01-05 3 views
1

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

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

  • текущий часовой пояс, как количество часов +/- от UTC
  • Dst как количество часов, чтобы добавить

мне нужно знать:

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

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

timestamp % 86400 # seconds from midnight 

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

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

примечания:

  • 86400 = секунды в один день

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

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

+0

@selbie, что високосные годы имеют отношение к дню недели? В високосном году мы добавляем 1 день в месяц, а не один день в неделю. Я не разделяю по годам, я разделяю дни/недели. –

+0

мой плохой. Високосный год имеет значение для вычисления года/месяца/дня. Но вы правы в течение дня недели, это не имеет значения. – selbie

ответ

0

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

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