[技术问答] 使用RTC需要考虑闰年闰月么?

[复制链接]
 楼主| koala889 发表于 2021-9-26 15:24 | 显示全部楼层 |阅读模式
是闰年闰月自动转换,
还是需要人为处理呢?
SDLin 发表于 2021-9-26 18:39 | 显示全部楼层
需要从软件上作转换的,可以参考以下:
/*
* This only works for the Gregorian calendar - i.e. after 1752 (in the UK)
*/
/*计算公历*/
void GregorianDay(struct rtc_time * tm)
{
        int leapsToDate;
        int lastYear;
        int day;
        int MonthOffset[] = { 0,31,59,90,120,151,181,212,243,273,304,334 };

        lastYear=tm->tm_year-1;

        /*计算从公元元年到计数的前一年之中一共经历了多少个闰年*/
        leapsToDate = lastYear/4 - lastYear/100 + lastYear/400;      

     /*如若计数的这一年为闰年,且计数的月份在2月之后,则日数加1,否则不加1*/
        if((tm->tm_year%4==0) &&
           ((tm->tm_year%100!=0) || (tm->tm_year%400==0)) &&
           (tm->tm_mon>2)) {
                /*
                 * We are past Feb. 29 in a leap year
                 */
                day=1;
        } else {
                day=0;
        }

        day += lastYear*365 + leapsToDate + MonthOffset[tm->tm_mon-1] + tm->tm_mday; /*计算从公元元年元旦到计数日期一共有多少天*/

        tm->tm_wday=day%7;
}
kkzz 发表于 2021-10-2 13:49 | 显示全部楼层
肯定需要的。         
hudi008 发表于 2021-10-2 13:50 | 显示全部楼层
代码里面就可以实现的。     
lzmm 发表于 2021-10-2 13:50 | 显示全部楼层
人为处理一下。            
minzisc 发表于 2021-10-2 13:50 | 显示全部楼层
你意思是要写入时间吗   
selongli 发表于 2021-10-2 13:50 | 显示全部楼层
在写入RTC的时候,需要考虑。         
fentianyou 发表于 2021-10-2 13:50 | 显示全部楼层
内部有RTc吗        
xiaoyaodz 发表于 2021-10-2 13:50 | 显示全部楼层
闰年闰月需要判断的。         
febgxu 发表于 2021-10-2 13:51 | 显示全部楼层
实现农历吗     
pixhw 发表于 2021-10-2 13:51 | 显示全部楼层
需要代码判断是否为闰年。            
sdlls 发表于 2021-10-2 13:51 | 显示全部楼层
代码进行转换的。            
 楼主| koala889 发表于 2021-10-14 11:02 | 显示全部楼层
SDLin 发表于 2021-9-26 18:39
需要从软件上作转换的,可以参考以下:
/*
* This only works for the Gregorian calendar - i.e. after 1 ...

恩,感谢!
这个我可能要慢慢试,刚学不久!
单片小菜 发表于 2021-10-19 09:36 | 显示全部楼层
必须需要的,这个很重要。可以参考例程的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

473

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部