日期求星期的算法及闰年来历

日期算法

/*

星期计算公式

(年+年/4+年/400-年/100-年基数+月基数+日)/7=……余星期几

注:式中分数均取整

年基数:平年1,闰年2,

月基数:

1、平年:一月0, 二月3, 三月3, 四月6, 五月1, 六月4,

七月0, 八月3, 九月5, 十月0, 十一月3, 十二月5.

2、闰年:一月0, 二月3, 三月4, 四月0, 五月2, 六月5,

七月0, 八月3, 九月6, 十月1, 十一月4, 十二月6.

如:1949年10月1日是星期几?

(1949+1949/4+1949/400-1949/100-1+0+1)/7

=(1949+487+4-19-1+0+1)/7

=345……6

即该日为星期六。

增加几个函数,用于计算星期

*/

闰年的判断方法:

整百的年份,能被4整除但不能被400整除的,不是闰年。

也就是说2000年是闰年,1900年、2100年等不是闰年。

地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。整百的年份,能被4整除但不能被400整除的,不是闰年。 也就是说2000年是闰年,1900年、2100年等不是闰年。

地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来, 因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。

使用C语言实现如下

INT8U is_leap_year( INT8U x ) //判断是否为闰年

{

} INT32U year; year = ( x / 16 * 10 ) + ( x & 15 ) + 2000; if( ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ) return 1; else return 0;

INT8U jsxq( INT8U year, INT8U month, INT8U day )

{

INT8U flag = 0;//标识所给定的年份是否为闰年 INT8U year_j =0, month_j=0;//表示年基和月基 INT8U month_temp;//表示转换为十进制的月份 INT32U year_temp;//表示转换为十进制的年份 INT8U day_temp;//表示转换为十进制的日期 INT8U xq;//表示最后计算结果的星期 year_temp = ( year / 16 * 10 ) + ( year & 15 ) + 2000; month_temp = (month / 16 * 10)+( month & 15 ); day_temp = (day / 16 * 10)+( day & 15 ); flag = is_leap_year( year ); if( flag == 0) { year_j = 1; switch(month_temp) { case 1: case 7: case 10: month_j = 0; break; case 2: case 3: case 8: case 11:

} else { } break; case 4: month_j = 6; break; case 5: month_j = 1; break; case 6: month_j = 4; break; case 9: case 12: month_j = 5; break; default: break; year_j = 2; switch(month_temp) { case 1: case 4: case 7: month_j = 0; break; case 2: case 8: month_j = 3; break; case 3: case 11: month_j = 4; break; case 5: month_j = 2; break; case 6: month_j = 5; break; case 9:

} } month_j = 6; break; case 10: month_j = 1; break; default: break;

//(年+年/4+年/400-年/100-年基数+月基数+日)/7=……余星期几

//注:式中分数均取整

xq = ( year_temp + year_temp / 4 + year / 400 - year_temp / 100 - year_j + month_j + day_temp ) % 7 ;

return xq;

}

日期算法

/*

星期计算公式

(年+年/4+年/400-年/100-年基数+月基数+日)/7=……余星期几

注:式中分数均取整

年基数:平年1,闰年2,

月基数:

1、平年:一月0, 二月3, 三月3, 四月6, 五月1, 六月4,

七月0, 八月3, 九月5, 十月0, 十一月3, 十二月5.

2、闰年:一月0, 二月3, 三月4, 四月0, 五月2, 六月5,

七月0, 八月3, 九月6, 十月1, 十一月4, 十二月6.

如:1949年10月1日是星期几?

(1949+1949/4+1949/400-1949/100-1+0+1)/7

=(1949+487+4-19-1+0+1)/7

=345……6

即该日为星期六。

增加几个函数,用于计算星期

*/

闰年的判断方法:

整百的年份,能被4整除但不能被400整除的,不是闰年。

也就是说2000年是闰年,1900年、2100年等不是闰年。

地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。整百的年份,能被4整除但不能被400整除的,不是闰年。 也就是说2000年是闰年,1900年、2100年等不是闰年。

地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故四年于2月加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来, 因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的,虽然是4的倍数,也是平年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。

使用C语言实现如下

INT8U is_leap_year( INT8U x ) //判断是否为闰年

{

} INT32U year; year = ( x / 16 * 10 ) + ( x & 15 ) + 2000; if( ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ) return 1; else return 0;

INT8U jsxq( INT8U year, INT8U month, INT8U day )

{

INT8U flag = 0;//标识所给定的年份是否为闰年 INT8U year_j =0, month_j=0;//表示年基和月基 INT8U month_temp;//表示转换为十进制的月份 INT32U year_temp;//表示转换为十进制的年份 INT8U day_temp;//表示转换为十进制的日期 INT8U xq;//表示最后计算结果的星期 year_temp = ( year / 16 * 10 ) + ( year & 15 ) + 2000; month_temp = (month / 16 * 10)+( month & 15 ); day_temp = (day / 16 * 10)+( day & 15 ); flag = is_leap_year( year ); if( flag == 0) { year_j = 1; switch(month_temp) { case 1: case 7: case 10: month_j = 0; break; case 2: case 3: case 8: case 11:

} else { } break; case 4: month_j = 6; break; case 5: month_j = 1; break; case 6: month_j = 4; break; case 9: case 12: month_j = 5; break; default: break; year_j = 2; switch(month_temp) { case 1: case 4: case 7: month_j = 0; break; case 2: case 8: month_j = 3; break; case 3: case 11: month_j = 4; break; case 5: month_j = 2; break; case 6: month_j = 5; break; case 9:

} } month_j = 6; break; case 10: month_j = 1; break; default: break;

//(年+年/4+年/400-年/100-年基数+月基数+日)/7=……余星期几

//注:式中分数均取整

xq = ( year_temp + year_temp / 4 + year / 400 - year_temp / 100 - year_j + month_j + day_temp ) % 7 ;

return xq;

}


相关内容

  • 阳历中日期与星期的对应规律
  • 阳历中日期与星期的对应规律 阳历,是世界各国通用的历法,也是我国通用的历法.现行阳历由于世界通用,因此又称为公历.阳历历法中的时间分类单位有世纪.年.月.日.星期等,其中,"某月某日是星期几"是在日常生活中用得非常多的,人们总是或多或少要提到它.阳历一年有365天(闰年366天) ...

  • [年月日的认识]说课稿
  • <年月日的认识>说课稿 一.教材分析 <年月日的认识>是人教版小学数学第六册的年月日这一单元的内容之一.时间单位是较为抽象的计量单位,学生在二年级已经学过与他们生活比较接近的时间单位时.分.秒.随着年龄增长,生活经验的增多,年.月.日的知识也越来越多地出现在他们的生活和学习中 ...

  • 三伏天与夏九九以及数九寒天的来历与计算
  • 三伏天与夏九九以及数九寒天的来历以及计算 伏天与夏九九 夏至开始,依照干.支纪日的排列,第三个庚日为初伏.第四个伏"表示阴气受阳气所迫藏伏在地下的意思,每年有三个伏,三伏天是一年中最热的时候. 从从夏至后的第四个庚日起为庚日为中伏,立秋后第一个庚日为末伏.庚日的"庚"字 ...

  • 古汉语知识与语文常识
  • 个人整理 他人不得翻印 名言名句 ◆ 试玉要烧三日满,辩才须待七年期. ◆ 独学而无友,则孤陋而寡闻. ◆ 独上高楼,望尽天涯路. 衣带渐宽终不悔,为伊悄得人憔悴. ◆ 平时多流汗,战时少流血,打一仗,进一步. ◆ 丈夫有泪不轻弹,只因未到伤心处. ◆ 自信应如云舒卷,心高当与月徘徊. ◆ 夫运筹帷 ...

  • 实验五 模块化的程序设计
  • 实验五 模块化的程序设计 实验目的 (1)理解自顶向下,逐步细化的模块化设计思想划分子模块:知道模块化程序设计方法. (2)熟悉函数的定义.函数的声明和函数的调用,理解函数调用的实现过程. (3)理解函数调用时的数据传送机制,通过参数将主调函数的数据传递到被调函数,运用 return语句将被调函数的 ...

  • 地球概论第六章地球运动的地理意义
  • 第六章 地球运动的地理意义 第一节 四季和五带 一.太阳的回归运动 1.太阳回归运动和太阳赤纬的变化 形成四季和五带的根本原因是黄赤交角,而直接原因是太阳相对于天赤道的回归运动. 地球在公转轨道上以年为周期的绕日运动,在地球上看就是太阳视位置在黄道上的周年变化.由于黄赤交角的存在,太阳的视位置的赤纬 ...

  • 基于单片机的万年历设计
  • 基于单片机的万年历设计 一. 题目要求 1. 能星期.时.分,年.月.日正常显示,且秒闪. 2. 按下KEY1,进入设置状态,根据按键次数可判断调整哪个(星期.时.分.年.月.日).调整星期.时.分时,对应位闪烁且四灯灭.调整年.月.日时,对应位闪烁且四灯灭. 3.在设置状态下按下KEY2,加时间. ...

  • 常用的计量单位(二)
  • 常用的计量单位(二)教学内容:教科书第86-87页的重量单位和时间单位以及相应的"做一做",练习十八的第6-14题.教学目的:使学生比较系统地掌握常用的重量单位和时间单位,以及相邻两个单位间的进率.教具准备:1千克的物品,投影仪,重量单位表.时间单位表的投影片:将练习十八的第6题 ...

  • 冀教版三年级数学下册教材分析
  • 冀教版<数学>三年级下教材分析 一.教材内容安排 本册教材共安排了九个单元,"数与代数"."空间与图形"."统计与概率"."实践活动"等四个领域的单元安排和主要内容如下: (一)数与代数(共5个单元) ● 第 ...