星期几算法的日期?

时间:2011-04-26 23:52:10

标签: c++ algorithm

给定一天,一个月和一年的算法是什么,它会返回一周中的哪一天?

3 个答案:

答案 0 :(得分:23)

可以使用std::mktimestd::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';

答案 1 :(得分:0)

你需要一个起点。今天很好。硬编码。

然后,您需要表示一个月内的天数。这是31,28,31,30,31,30 ......因此,您可以开始在每年的星期几中添加和减去365%7,并且(再次以月份的天数之和)%7。等等。

警告:闰年发生在每4年,但不是每100年,除非那一年也是400的倍数。

答案 2 :(得分:0)

最简单的算法之一是坂本智彦算法:

static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

查看以下内容:https://iq.opengenus.org/tomohiko-sakamoto-algorithm/

我发现王的方法也很有趣

w = (d - d^(m) + y^ - y* + [y^/4 - y*/2] - 2( c mod 4)) mod 7

http://rmm.ludus-opuscula.org/PDF_Files/Wang_Day_5_8(3_2015)_high.pdf此pdf确实也很有帮助。

谢谢!