蔡勒公式:计算星期

/*蔡勒公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1    计算的时间在1582年之后
c:世纪(年的高两位数);                            输入年月日,计算出周几
y:年(年的低两位数);                        
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月*/
u8 get_week(u8 *in_time_str,struct SD3078_TIMER *out_timer) //2022-03-09 03:26:49
{
    short century = 0,year = 0,month = 0,day = 0,week = 0;//世纪
    u8 tmp_data[20] = {0},len = 0;
    len = strlen(in_time_str);

    strncpy(tmp_data,in_time_str,len);  
    out_timer->year = asc_int(tmp_data, 4);
    out_timer->month = asc_int(&tmp_data[5], 2);
    out_timer->day = asc_int(&tmp_data[8], 2);
    
    out_timer->hour = asc_int(&tmp_data[11], 2);
    out_timer->minute = asc_int(&tmp_data[14], 2);
    out_timer->second = asc_int(&tmp_data[17], 2);

    century = asc_int(tmp_data,2);  //20世纪
    year = asc_int(&tmp_data[2],2); //22年
    month = out_timer->month;  
    if(month == 1 || month == 2)
    {
        if(month == 1)
            month = 13;    
        else if(month == 2)
            month = 14;    

        if((year/10) || (year % 10))
            year -= 1; //如果是2000年,那么世纪减1:19  年份为:99    合计:1999
        else
        {
            century -= 1;
            year = 99;
        }        
    }
    
    week = year+(year/4)+(century/4)-2*century+(26*(month+1)/10)+out_timer->day-1; 
    week = (week%7+7)%7;
    out_timer->week = week; 
    printf("week:%d\n",week);
    
    return 0;
}

 

posted @ 2022-05-27 19:55  耿通宇  阅读(172)  评论(0编辑  收藏  举报