Каков алгоритм, который, учитывая день, месяц и год, возвращает день недели?
Алгоритм "Дата в день недели"?
Ответ 1
Это можно сделать, используя std::mktime
и std::localtime
. Эти функции не просто POSIX, они предусмотрены стандартом С++ (С++ 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';
Ответ 2
Вам нужна начальная точка. Сегодня все хорошо. Hard-code it.
Затем вам нужно указать количество дней в месяц. Это 31, 28, 31, 30, 31, 30,.... Таким образом, вы можете начать добавлять и вычитать 365% 7 в день недели за каждый год и (сумма дней в разнице месяца)% 7 снова. И так далее.
Предостережение: Високосные годы происходят каждые 4 года, но не каждые 100, если только этот год не является кратным 400.