- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
得到某天星期几算法
static int getWeekDay(DateTime date)
{
int[] t = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
int month = date.Month;
int day = date.Day;
int year = date.Year;
int weekday = 0;
year -= month 3 ? 1 : 0;
weekday = (year + year / 4 - year / 100 + year / 400 + t[month - 1] + day) % 7;
return weekday;
}
得到某年某月某日是星期几的算法..
一般的想法是..
从一个已知星期几的天数开始(比如2000年1月1日为星期六),作为参考点.
先计算出从这个参考点到将要计算的某年某月某日经过了多少天..假设到2001年1月1日为366天.则2001年1 月1日为星期2(366%7=2).这个基本算法要从参考点出发,得到经过了多少天. 因为润年有366天.这样的话就要计算经过的年间是否有润年.
而本文介绍的算法.优雅简短.是由Tomohiko Sakamoto提出的一个得到星期几的优秀算法
要了解这个算法,首先必须知道以下知识.
平年365天=52*7 + 1润年366天=52*7 + 2规则1:每经过一个平年,对应日期的星期号递增1;规则2:每经过一个润年,3月前对应日期的星期号递增1,3月开始对应日期的星期号递增2。
年y的第cd天( cd = ∑dayOfMon + d )是星期w2
if(isLeap(y))????w2 = (y + y/4-y/100+y/400 - 1 + cd + H)%7;
//假设经过y年, y/4-y/100+y/400得到y年间润年数.这里-1是因为表达式(y/4-y/100+y/400)对于润年y 已经计算了偏移1(注意规则2, y/4-y/100+y/400把当年为润年的偏移1也计算了进去的意思是,因为2月29天是多出来的一天.所以3月开始,这里的-1会被这多出来的一天补正,而3月前对应的星期号不应该加上这多出来的一天, -1即是为了满足3月前对应日期的星期号递增1,3月开始对应日期的星期号递增2这一规则做出的补正)else????w2 = (y + y/4-y/100+y/400 + cd + H)%7;
原文:
如果将每月第1天的星期号建立一个表,取名叫 月初日星期表,则可用查表的方法代替计算 ∑dayOfMon。假设1月1日是星期0(星期天),则平年和润年的月初日星期表分别为wFirstDayOfMonth_noLeap[]={0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};wFirstDayOfMonth_Leap[] ={0, 3, 4, 0, 2, 5, 0, 4, 6, 1, 4, 6};于是 y/m/d 的星期号w3计算式如下if(isLeap(y))????w3 = (y + y/4-y/100+y/400 - 1 + wFirstDayOfMonth_Leap[m] + d + H)%7;else????w3 = (y + y/4-y/100+y/400 + wFirstDayOfMonth_noLeap[m] + d + H)%7;
对比平年和润年的月初日星期表,差异产生在 2月的第29日,再考虑以上两个计算式的差异-1,可以将两个月初表合二为一。如果取平年的月初日星期表,则 y/m/d 的星期号w的计算式如下:static int wFirstDayOfMonth_noLeap[]={0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};if(m3){?y--; // 期望通过y的变形来统一公式... 通过尝试,结果是可喜的! 消除了润年判断。?if(leap(y))?{??w = (y+1 + y/4-y/100+y/400+1 + wFirstDayOfMonth_noLeap[m-1] + d + 5) % 7;?}?else?{??w = (y+1 + y/4-y/100+y/400 + wFirstDayOfMonth_noLeap[m-1] + d + 6) % 7;?}?}else?w = (y + y/4-y/100+y/400 + wFirst
您可能关注的文档
最近下载
- 律师制度与实务课件:律师收费.pptx
- xx集团粮食仓储及加工基地可行性研究报告.docx
- (正式版)-B 5768.2-2022 道路交通标志和标线 第2部分:道路交通标志.docx VIP
- 青少年法制教育讲稿-甘肃省副省长罗笑虎为中小学生作毒品预防教育报告全文.docx VIP
- 2025年水平定向钻市场调查报告.docx
- 辅导员大一新生入学教育主题班会.pptx VIP
- 天津布兰德新摩尔企业策划咨询有限公司公司简介.ppt VIP
- intouch hmi与archestra集成本机成功安装.pdf VIP
- 中国染料化工项目经营分析报告.docx
- 2025-2026学年浙美版(2024)小学美术二年级上册教学计划及进度表.docx
文档评论(0)