28982 автора и 62 редактора ответили на 85243 вопроса,
разместив 135214 ссылок на 43429 сайтов, присоединяйтесь!

Где найти метод (алгоритм) определения дня недели по дате?

РедактироватьВ избранноеПечать

Когда под рукой нет календаря, для того чтобы определить, какой сегодня день недели, можно воспользоваться следующим алгоритмом:

 

1. Обозначим число, месяц и год соответственно d, m и y.

2. Если m ≤ 2 (т.е. месяц январь или февраль), то год уменьшим на 1, а число увеличим на 3:

    y:= y–1; 

    d:= d+3;

3. Теперь номер дня недели (w) вычисляется по следующей формуле:

    w:= 1 + [d + y + y/4 – y/100 + y/400 + (31m+10)/12] mod 7;

(все операции деления — целочисленные, т.е. берется целая часть частного; mod — операция получения остатка от деления).

 

Результатом будет целое число в диапазоне от 1 до 7, соответствующее дням недели от воскресенья до субботы (1 — понедельник, 2 — вторник, 3 — среда, 4 — четверг, 5 — пятница, 6 — суббота, 7 — воскресенье).

 

Данный алгоритм получен модификацией широко известного алгоритма вычсиления дня недели.

 

Преимущества модифицированного алгоритма:

  • не требует использования вспомогательных переменных;
  • удобен в языках программирования, использующих передачу параметров по значению;
  • дает результат, соответствующий русской традиции нумерации дней недели, начиная с понедельника. 

Алгоритм работает в пределах применимости григорианского календаря.

 

Примеры:

 

1. Текущая дата: 27.09.2009

d = 27;

m = 9;

y = 2009;

Поскольку m > 2, сразу переходим к п.3

w = 1 + [27 + 2009 + 2009/4 – 2009/100 + 2009/400 + (31*9+10)/12] mod 7 =

   = 1 + [27 + 2009 + 502 – 20 + 5 + 24] mod 7 = 1 + 6 = 7 — воскресенье.

 

2. Текущая дата: 31.01.1968

d = 31;

m = 1;

y = 1968;

Поскольку m ≤ 2, введем коррекцию:

y = 1967;

d = 34;

Теперь вычисляем:

w = 1 + [34 + 1967 + 1967/4 – 1967/100 + 1967/400 + (31*1+10)/12] mod 7 =

   = 1 + [34 + 1967 + 491 – 19 + 4 + 3] mod 7 = 1 + 2= 3 — среда.

 

Ссылки: 

Дополнительно на Геноне:

Последнее редактирование ответа: 09.03.2012

  • Оставить отзыв

    Оставить отзыв

РедактироватьВ избранноеПечать

«Где найти метод (алгоритм) определения дня недели по дате»

В других поисковых системах:

GoogleЯndexRamblerВикипедия

В соответствии с пользовательским соглашением администрация не несет ответственности за содержание материалов, которые размещают пользователи. Для урегулирования спорных вопросов и претензий Вы можете связаться с администрацией сайта genon.ru. Размещенные на сайте материалы могут содержать информацию, предназначенную для пользователей старше 18 лет, согласно Федерального закона №436-ФЗ от 29.12.2010 года "О защите детей от информации, причиняющей вред их здоровью и развитию". Обращение к пользователям 18+.