给定一个xxxx-xx-xx日期,计算为星期几。
直接使用基姆拉尔森计算公式,外文名是Kim larsen calculation formula。
从 公元0年1月1日星期日 开始,已考虑各种因素。详见过程见大佬博客基姆拉尔森计算 公式推导。
#include <stdio.h> /* * 基姆拉尔森计算公式 * W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 */ int week(int y, int m, int d) { if (m < 3) { m += 12; y--; } int w = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1) % 7; return w; } int main() { printf("%d ", week(2019, 9, 15)); //=>0 星期天 printf("%d ", week(2015, 4, 16)); // => 4 星期四 printf("%d ", week(1989, 2, 3)); // => 5 星期五 return 0; }
蔡勒公式也有着同样的作用。
但是要区分1582.10.4的之前和之后。
#include <stdio.h> /* * 蔡勒公式 * 1582.10.4之后 w = (y + y/4 + c/4 - 2*c + (26*(m+1))/10 + d - 1) % 7 * 1582.10.4及之前 w = (y + y/4 + c/4 -2*c + (13*(m+1))/5 + d + 2) % 7; */ int week(int y, int m, int d) //1582.10.4之后星期的计算 { if (m < 3) { m += 12; y--; } int c = y / 100; y = y - c*100; int w = (y + y/4 + c/4 - 2*c + (26*(m+1))/10 + d - 1) % 7; w = (w + 7) % 7; return w; } int main() { printf("%d ", week(2019, 9, 15)); //=>0 星期天 printf("%d ", week(2015, 4, 16)); // => 4 星期四 printf("%d ", week(1989, 2, 3)); // => 5 星期五 return 0; }
参考链接:
1. https://blog.cocoabit.com/mo-nian-li-ji-suan-xing-qi-ji-mu-la-er-sen-gong-shi/
2. https://www.cnblogs.com/SeekHit/p/7498408.html
3. 百度百科——蔡勒公式