Де знайти метод (алгоритм) визначення дня тижня по даті?


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

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 – Середа.

Посилання:

  • Алгоритм обчислення дня тижня – Вікіпедія.

Додатково на Генон:

  • Як за датою визначити день тижня?
  • Що таке григоріанський календар?
  • Чому в різні роки одна і та ж дата припадає на різні дні тижня?
  • Де знайти астрономічний календар?
  • Як самому расcчитать дату Пасхи?

Category: Різне

Comments (Прокоментуй!)

There are no comments yet. Why not be the first to speak your mind.

Leave a Reply