打印

一段蔡勒公式的程序,有点意思,给大家开心开心

[复制链接]
2559|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mackay|  楼主 | 2009-6-25 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, HDL, HDLC, hd, CD
 蔡勒(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:日
  [ ]代表取整,即只要整数部分。
   
    某日,做一个项目,通过485得到一串数据,其中里面包含有,年月日,时分秒,而这个项目里面要求得不到数据时,要知道时间,就加了一个RTC,于是,就用到这个蔡勒公式,求星期几再写到RTC里面。于是,就要下面的一段小程序,有点意思,给大家开心开心,懒得修改,就整段复制过来。
uchar HDLCData[11] = {0x80,0x01,0x13,0x20,0x00,0x09,0x06,0x04,0x14,0x13,0x00};
uchar set_rtc_code1[7];

void Check_timer_HDLC(void) {
    uchar j = 0;
    uchar y,m,d,w;
    set_rtc_code1[0] = HDLCData[10];
    set_rtc_code1[1] = HDLCData[9];
    set_rtc_code1[2] = HDLCData[8];
    set_rtc_code1[4] = HDLCData[7];        
    set_rtc_code1[5] = HDLCData[6];
    set_rtc_code1[6] = HDLCData[5];
    y = HDLCData[5];
    m = HDLCData[6];
    d = HDLCData[7];
    if(m < 3) {
        m = m + 12;
    }
    if(y > 0x09) {
        while(y > 0x10) {
            y = y - 0x10;
            j ++;
        }
        if(y == 0x10) {
            y = 0x0a + j* 0x0a;
        }else
            y = j* 0x0a + y;
    }
    j = 0;
     if(m > 9) {
            while(m > 0x10) {
            m = m - 0x10;
            j ++;
        }
        if(m == 0x10) {
            m = 0x0a + j* 0x0a;
        }else
            m = j* 0x0a + m;
    }
    j = 0;
     if(d > 9) {
            while(d > 0x10) {
            d = d - 0x10;
            j ++;
        }
        if(d == 0x10) {
            d = 0x0a + j* 0x0a;
        }else
            d = j* 0x0a + d;
    }

    w = 5 + y + (y / 4) + (13 * (m + 1)/5) + d - 1;
    if(w > 40)
        w = w - 40;
    else    {
        w = 40 - w;
        w = w % 7;
        w = 7 - w;
    }
    if(w % 7 == 0)
        w = 7;
    else
        w = w % 7 ;
    set_rtc_code1[3] = w;
}

各位见笑了。

相关帖子

沙发
mohanwei| | 2009-6-26 09:06 | 只看该作者

参考一下mktime和gmtime的源码可以理解得更透彻一些

vc,linux……都带这些时间函数族的源码的

使用特权

评论回复
板凳
FREEXP| | 2009-6-26 10:18 | 只看该作者

确实精巧啊

经典之作!!!

使用特权

评论回复
地板
hotpower| | 2009-6-27 23:08 | 只看该作者
5
5_0_5| | 2009-6-28 11:45 | 只看该作者

终于见到大叔了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

0

粉丝