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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
日期求星期的算法及闰年来历

日期算法 /* 星期计算公式 (年+年/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: month_j = 3; break; case 4: month_j = 6; break; case 5: month_j = 1; break;

文档评论(0)

dyn593 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档