tag 标签: 年月日,星期

相关博文
  • 热度 11
    2012-5-18 16:36
    1790 次阅读|
    0 个评论
    在门禁系统中要用到星期,但是在设置时间的时候,一般只设置年月日时分秒,不会去设置星期,那么如何根据年月日来得到星期?有一个公式: (年+年/4+年/400-年/100-年基数+月基数+日)%7=星期 余数为0是星期天,为6是星期六 注:式中分数均取整       年基数,平年1,闰年2,       月基数,1、平年:一月0, 二月3, 三月3, 四月6, 五月1, 六月4,                                      七月0, 八月3, 九月5, 十月0, 十一月3, 十二月5.                      2、闰年:一月0, 二月3, 三月4, 四月0, 五月2, 六月5,                                      七月0, 八月3, 九月6, 十月1, 十一月4, 十二月6. 例如:2012-5-18是星期几 2012是闰年,年基数为2,5月的月基数为2 (2012+2012/4+2012/400-2012/100-2+2+18)%7 = (2012+503+5-20-2+2+18)%7=2518%7=5 所以2012-5-18是星期五 C程序如下: /***************************************************** *判断是否是闰年函数 *月份        1  2   3   4   5   6   7  8  9   10 11 12 *闰年       31 29 31 30 31 30 31 31 30 31 30 31 *非闰年  31 28 31 30 31 30 31 31 30 31 30 31 *输入:年份 *输出:该年份是不是闰年.1,是.0,不是 ******************************************************/ uchar Is_Leap_Year(uint year) {                                   if(year % 4 == 0) //必须能被4整除        {               if(year % 100 == 0)               {                      if(year % 400 == 0)                             return 1;//如果以00结尾,还要能被400整除                             else                             return 0;                 }               else                      return 1;          }        else               return 0;  } //-------------------------------------------- uchar Get_Week(uint year,uint month,uint day) {        uchar leap,week;        uint y;               uchar xdata mon1 = {0,3,3,6,1,4,0,3,5,0,3,5};//平年月基数        uchar xdata mon2 = {0,3,4,0,2,5,0,3,6,1,4,6};//闰年月基数          leap = Is_Leap_Year(year);          if(leap) //闰年        {               y = year + year / 4 + year /400 - year / 100 - 2 + mon2   + day;                      }        else //平年        {               y = year + year / 4 + year /400 - year / 100 - 1 + mon1   + day;        }          week = y % 7;        return week; }