Алгоритм даты и дня недели? - PullRequest
12 голосов
/ 27 апреля 2011

Каков алгоритм, который с учетом дня, месяца и года возвращает день недели?

Ответы [ 2 ]

23 голосов
/ 27 апреля 2011

Это можно сделать с помощью функций std::mktime и std::localtime.Эти функции не просто POSIX, они предписаны стандартом C ++ (C ++ 03 §20.5).

#include <ctime>

std::tm time_in = { 0, 0, 0, // second, minute, hour
        4, 9, 1984 - 1900 }; // 1-based day, 0-based month, year since 1900

std::time_t time_temp = std::mktime( & time_in );

// the return value from localtime is a static global - do not call
// this function from more than one thread!
std::tm const *time_out = std::localtime( & time_temp );

std::cout << "I was born on (Sunday = 0) D.O.W. " << time_out->tm_wday << '\n';
0 голосов
/ 27 апреля 2011

Вам нужна отправная точка. Сегодня все хорошо. Жесткий код.

Затем вам нужно указать количество дней в месяце. Это 31, 28, 31, 30, 31, 30, .... Таким образом, вы можете начать складывать и вычитать 365% 7 в день недели для каждого года и (сумма дней в разнице месяцев) снова% 7. И так далее.

Предостережение: високосные годы происходят на каждом 4-м году, но не на каждом 100-м, если только этот год не кратен 400.

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