给定年月日,一个公式巧算星期几
来源:互联网 发布:波士顿矩阵市场增长率 编辑:程序博客网 时间:2024/05/05 02:59
来看公式:
int CaculateWeekDay(int y,int m, int d){ if(m==1||m==2) { m+=12; y--; } int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return iWeek;}
该公式是从公元0年1月1日开始推导的
刚看挺复杂,我逐一分析:
iWeek= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7
1.
(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7
2.
(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7
不考虑瑞年,则每天为 365 天。由于365是7的52倍多1天,所以加上y
3.
(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7
如果考虑闰年,由于闰年比平年多一天,
y/4-y/100+y/400
4.
(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) %7
有人会问为什么非得把1,2月份当作13 ,14月份呐,为什么不是1,2,3或其他的呐?
因为只有2月份的天数是随着闰年和平年变化的,如果是三月份随着平年和闰年变化的,那就把1,2,3移动到其后面成为13,14,15月份
要问为什么?
看下表:
月 误差 累计 模7
3 3 0 0
4 2 3 3
5 3 5 5
6 2 8 1
7 3 10 3
8 3 13 6
9 2 16 2
10 3 18 4
11 2 21 0
12 3 23 2
13 3 26 5
14 - 29 1
发现没有,二月份的误差是不用计算的,所以就解决了二月份天数变化与整年的变化的一致性。
至于这个公式:
2*m+3*(m+1)/5
你也可以用一个数组存储模7,然后用下标调用
不过还是公式比较好用一点
- 给定年月日,一个公式巧算星期几
- 【公式计算,给定年月日输出星期几】
- 已知年月日算星期几的巨牛公式(转载)
- 年月日计算星期公式
- 根据年月日,计算出是星期几的牛逼公式
- 根据年月日计算星期几 (蔡勒公式)
- 根据年月日推算是星期几的公式
- 从2000年一月一日算,给一个天数,算出它是多少年月日 星期几
- 问题:计算给定年月日的日期是星期几(泽勒一致性)
- 根据年月日获得星期几
- 根据年月日算出是星期几
- 根据年月日计算星期几
- 知道年月日求星期几
- 基姆拉尔森计算公式 (根据输入的年月日输出星期几)
- 基姆拉尔森计算公式 (根据输入的年月日输出星期几)
- 63_给出年月日计算出星期几_蔡勒公式的运用.cpp
- C/C++ 根据年月日计算星期几——蔡勒公式篇
- C/C++ 根据年月日计算星期几——蔡勒公式篇
- Java--类的继承--回合制对战游戏
- c++作业5
- shell浅谈之二运算符和IF条件判断
- flask笔记:5:数据库
- HDU 1392.Surround the Trees【凸包(求凸包周长)】【5月10】
- 给定年月日,一个公式巧算星期几
- sshd服务
- [Python] RiceRocks游戏 Mini-project #8
- C++实验5—求和
- 断案
- 各种排序方法汇总
- [bzoj4551][TJOI&HEOI2016]树
- NYOJ - 168 房间安排
- 金牌、银牌、铜牌