ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蔡勒公式:计算星期

2022-05-27 20:00:43  阅读:198  来源: 互联网

标签:星期 tmp 公式 timer month 蔡勒 year data out


/*蔡勒公式: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;
}

 

标签:星期,tmp,公式,timer,month,蔡勒,year,data,out
来源: https://www.cnblogs.com/gengtongyu/p/16318978.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有