野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25270|回复: 7

野火RTC万年历的星期的算法

[复制链接]
发表于 2014-3-16 12:19:08 | 显示全部楼层 |阅读模式
/*
* 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;      
     /*如果计数的这一年位闰年,且计数的月份在二月份之后,则日数加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;
}




这个计算星期几到底怎么实现的啊??
回复

使用道具 举报

发表于 2014-3-16 13:22:42 | 显示全部楼层
这个其实是开源代码来的:http://www.oschina.net/code/expl ... werpc/kernel/time.c

你可以用浏览器 ctrl + f 快捷键来查找关键字“This only works for the Gregorian calendar - i.e. after 1752 (in the UK)”

一般都是用高斯公式来计算。
回复 支持 反对

使用道具 举报

发表于 2014-3-16 13:25:06 | 显示全部楼层
很多的代码,都可以从linux内核代码里找到相应的资料,从而移植进去我们的工程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-16 14:15:54 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-16 13:25
很多的代码,都可以从linux内核代码里找到相应的资料,从而移植进去我们的工程

哪里找Linux移植代码??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-16 14:18:57 | 显示全部楼层
对于很多代码,我有必要自己一句一句写,还是直接移植别人的??
回复 支持 反对

使用道具 举报

发表于 2014-3-16 14:20:48 | 显示全部楼层
寒灯 发表于 2014-3-16 14:18
对于很多代码,我有必要自己一句一句写,还是直接移植别人的??

懂思路,挑几个重点的练习一下。
时间匆匆,来不及每个东西都一句句写的,但一定要挑几个来练习一下,这样才能锻炼能力。

linux内核代码,一般百度一下就容易下载
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-16 14:22:40 | 显示全部楼层
玄来玄去 发表于 2014-3-16 14:20
懂思路,挑几个重点的练习一下。
时间匆匆,来不及每个东西都一句句写的,但一定要挑几个来练习一下,这 ...

强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-16 14:22:57 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-16 13:25
很多的代码,都可以从linux内核代码里找到相应的资料,从而移植进去我们的工程

强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 15:17 , Processed in 0.061898 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表