码迷,mamicode.com
首页 > 编程语言 > 详细

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

时间:2016-04-21 22:05:30      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:

C/C++ 根据年月日计算星期几——蔡勒公式篇

蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式。
随便给一个日期,就能用这个公式推算出是星期几。
蔡勒公式如下:
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1
或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符号含义如下:
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪-1(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日  [ ]代表取整,即只要整数部分。
下面以中华人民共和国成立100周年纪念日那天(2049年10月1日)来计算是星期几,过程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 =49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1
 =49+[12.25]+5-40+[28.6]
 =49+12+5-40+28
 =54 (除以7余5)
即2049年10月1日(100周年国庆)是星期五。
再比如计算2013年3月7日,过程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 =13+[13/4]+[20/4]-2*20+[26*(3+1)/10]+7-1
 =-3 (除以7余4,注意对负数的取模运算!)

[cpp] view plain copy
 
  1. int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )  
  2. {  
  3.     int iWeek = 0;  
  4.     unsigned int y = 0, c = 0, m = 0, d = 0;  
  5.   
  6.     if ( iMonth == 1 || iMonth == 2 )  
  7.     {  
  8.         c = ( iYear - 1 ) / 100;  
  9.         y = ( iYear - 1 ) % 100;  
  10.         m = iMonth + 12;  
  11.         d = iDay;  
  12.     }  
  13.     else  
  14.     {  
  15.         c = iYear / 100;  
  16.         y = iYear % 100;  
  17.         m = iMonth;  
  18.         d = iDay;  
  19.     }  
  20.       
  21.     iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1;    //蔡勒公式  
  22.     iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 );    //iWeek为负时取模  
  23.     if ( iWeek == 0 )    //星期日不作为一周的第一天  
  24.     {  
  25.         iWeek = 7;  
  26.     }  
  27.   
  28.     return iWeek;  
  29. }  

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

标签:

原文地址:http://www.cnblogs.com/wohenben/p/5418850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!