黑马程序员技术交流社区

标题: 关于计算日期为星期几的问题 [打印本页]

作者: 林成彬    时间: 2013-12-18 14:07
标题: 关于计算日期为星期几的问题
本帖最后由 林成彬 于 2013-12-18 14:48 编辑

刚刚碰上了一个问题,输入一个日期(yyyy-MM-dd),然后计算出该日期是星期几,上网搜索了一下,要用到吉姆拉尔森计算公式,请问这个公式是什么原理实现的呢?
作者: taxue0504    时间: 2013-12-18 14:21
本帖最后由 taxue0504 于 2013-12-18 14:24 编辑

蔡勒公式
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)  
其中,W是所求日期的星期数.如果求得的数大于7,可以减去7的倍数,直到余数小于7为止.c是公元年份的前两位数字,y是已知公元年份的后两位数字;m是月数,d是日数.方括[ ]表示只截取该数的整数部分

基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
把一月和二月看成是上一年的十三月和十四月
//y-年,m-月,d-日期

  1. string CaculateWeekDay(int y,int m, int d)
  2. {
  3. if(m==1||m==2) {
  4. m+=12;
  5. y--;
  6. }
  7. int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
  8. string weekstr="";
  9. switch(week)
  10. {
  11. case 1: weekstr="星期一"; break;
  12. case 2: weekstr="星期二"; break;
  13. case 3: weekstr="星期三"; break;
  14. case 4: weekstr="星期四"; break;
  15. case 5: weekstr="星期五"; break;
  16. case 6: weekstr="星期六"; break;
  17. case 0: weekstr="星期日"; break;
  18. }
  19. return weekstr;
  20. }
复制代码


作者: 林成彬    时间: 2013-12-18 14:33
taxue0504 发表于 2013-12-18 14:21
蔡勒公式
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)  
其中,W是所求日期的星期数.如果 ...

非常感谢
作者: dwgeneral    时间: 2014-5-1 11:49
蔡勒公式计算星期 原理   http://blog.segmentfault.com/zifeimen/1190000000345958




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2