日期求星期的算法及实现
- 格式:doc
- 大小:33.00 KB
- 文档页数:3
算法如下:基姆拉尔森计算公式: W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
但是在测试的时候发现有点出入,就是公式存在一点问题,得稍做修改:W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 +1代码如下:#region根据年月日计算星期几(Label2.Text=CaculateWeekDay(2004,12,9);) ///<summary>///根据年月日计算星期几(Label2.Text=CaculateWeekDay(2004,12,9);)///</summary>///<param name="y">年</param>///<param name="m">月</param>///<param name="d">日</param>///<returns></returns>public static string CaculateWeekDay(int y,int m, int d){if(m==1) m=13;if(m==2) m=14;int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;string weekstr="";switch(week){case 1: weekstr="星期一"; break;case 2: weekstr="星期二"; break;case 3: weekstr="星期三"; break;case 4: weekstr="星期四"; break;case 5: weekstr="星期五"; break;case 6: weekstr="星期六"; break;case 7: weekstr="星期日"; break;}return weekstr;}#endregion在开发网站的过程中,如开发新闻网站、论坛、聊天室等,都需要获取当前系统日期,本实例介绍如何获取系统日期并将系统日期用不同的格式显示出来。
星期的计算是以数学方法计算出某一指定日期是在一周中的哪一天。
多种数学算法可计算出过去或未来某一指定日期,是属于一周中的星期几,包括判决日法则(Doomsday Rule),Babwani公式等,但其实这些算法皆基于类似的机制相互变化而来,只是透过不同规则取得相同结果。
算法的典型应用,是计算某人的出生日期或某重大事件的发生日期,是在一周中的哪一天。
目录[隐藏]1 简介1.1 最简单的方法一1.2 最简单的方法二2 有用的概念2.1 同周月2.2 同周年3 算法3.1 例子3.2 世纪星期表3.3 年份星期表3.4 月份星期表3.5 日期星期表4 表格法5 心算法5.1 判决日5.2 年数的计算5.3 例子6 高斯公式6.1 例子7 Babwani公式8 蔡勒公式9 主日字母10 参见[编辑]简介差不多所有星期算法的基础皆可归纳如下:从一个已知的日子作为起始日,一般采用世纪的第一天,通过同余7计算共过去了多少天。
如将一周日子由0至6计算,结果将为一余数,如使用1至7计算,则7将代替0。
查表或使用已知规则计算上面的起始日,即该世纪开始的星期数。
查表或使用已知规则计算该年份开始的星期数。
计算该月份开始的星期数。
从该月份开始的计算该日的星期数。
简单来说,使用同余7表示在计算中可剔除7的倍数,如此可把7当作0、8当作1、9当作2、18当作4,如此类推。
如果把星期日当作第0日,7日后(第7日)亦是星期日,而第18日则会与第4日相同,为星期日后的4天,即星期四。
一些算法把所有加数先行计算,然后把7的倍数剔除,而其他算法则在每一步皆剔除7的倍数。
两种做法皆可取,第一种做法较适用于计算机及电脑算法中,其他则较适用于心算。
这些计算在熟习后,可在脑内计算出来。
[编辑]最简单的方法一把四个数加起来然后除七的余数就是,如果整除就是星期日。
这四个数分别是:Y(year):年份减2000L(leap days):从2000年1月1日到该日之间的闰日数目M(month):月份的代号,从一月到十二月分别是511462403513,即是一月是5,二、三月是1,四月是4,五月是6,如此类推,十二月是3就是说——Y+L+M+D(除7的余数)举例说:2008年12月10日(8+3+3+10)除7余3,即该日是星期三,其中Y=8、L=3(三个闰日分别是2000年2月29日、2004年2月29日和2008年2月29日)、M=3(12月的代号是3)、D=10再举一例:2008年2月10日(8+2+1+10)除7余0,即该日是星期日,其中Y=8、L=2(从2000年1月1日到2008年2月10日之间只有二个闰日:2000年2月29日和2004年2月29日)、M=1(2月的代号是1)、D=10此公式的原理365除七余一,所以每过一个平年,星期数便加一。
计算任何一天是星期几的几种算法近日在论坛上看到有人在问星期算法,特别整理了一下,这些算法都是从网上搜索而来,算法的实现是我在项目中写的。
希望对大家有所帮助。
一:常用公式W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + DY是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
二:蔡勒(Zeller)公式w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
相比于通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。
三:对蔡勒(Zeller)公式的改进作者:冯思琮相比于另外一个通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。
不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。
现将公式列于其下:W=[y/4]+r (y/7)-2r(c/4)+m’+d公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意:在笔者给出的公式中,y为润年时1’=5;2’=1)。
其他符号与蔡勒(Zeller)公式中的含义相同。
四:基姆拉尔森计算公式这个公式名称是我给命名的,哈哈希望大家不要见怪。
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
如何计算某一天是星期几在计算机学科中,我们可以用一些算法和公式来确定其中一天是星期几。
一种常用的算法是蔡勒公式(Zeller's congruence)。
蔡勒公式是由蔡耳(Christian Zeller)于1883年提出的一种公式,它可以在不使用计算机的情况下,快速计算出给定日期的星期几。
蔡勒公式的数学表达式如下:h=(q+(13*(m+1)/5)+K+K/4+J/4+5*J)%7其中h是星期几,取值范围为0到6,分别表示星期六到星期五;q是日期中的天数,取值范围为1到31;m是月份,如果是1月或2月,需要将其转换为13和14月,并将年份减少1,即转换为前一年的13月和14月;K是年份的最后两位数;J是年份的前两位数,需要注意的是,公式中J除以4的结果是整数除法,即只取整数部分。
首先,我们需要确定给定日期的年份(J)、月份(m)和天数(q)。
然后,我们对日期的月份和年份进行转换(如果需要),使用蔡勒公式计算出h的值。
根据h的值,我们可以得知给定日期是星期几。
让我们通过一个例子来说明如何计算其中一天是星期几。
假设我们要计算2024年5月20日是星期几。
首先我们将年份拆分成J和K。
对于2024年,J=20,K=22然后我们将月份进行转换,因为5月属于前一年的13月,所以我们需要将年份减少1,转换成前一年的13月和14月。
所以m=13接下来,我们需要计算h的值,根据蔡勒公式的表达式,我们可以将这个过程分解为以下步骤:1.计算(13*(m+1)/5)=(13*(13+1)/5)=522.计算K+K/4=22+22/4=27(整数除法)3.计算J/4=20/4=5(整数除法)4.计算5*J=5*20=1005.所以h=(q+52+27+5+100)%7=(20+52+27+5+100)%7=204%7=5最后,根据h的值,我们得出结论,2024年5月20日是星期五蔡勒公式是一种简单而有效的计算其中一天是星期几的方法。
C语⾔根据⽇期(年,⽉,⽇)判断星期⼏(使⽤基姆拉尔森计算公式)C语⾔根据⽇期判断星期⼏(使⽤基姆拉尔森计算公式)算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表⽰⽇期中的⽇数,m表⽰⽉份数,y表⽰年数。
注意:在公式中有个与其他公式不同的地⽅:把⼀⽉和⼆⽉看成是上⼀年的⼗三⽉和⼗四⽉,例:如果是2004-1-10则换算成:2003-13-10来代⼊公式计算。
以公元元年为参考,公元元年1⽉1⽇为星期⼀程序如下:/*利⽤基姆拉尔森计算⽇期公式 w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)*/#include <stdio.h>const char * getWeekdayByYearday(int iY, int iM, int iD){int iWeekDay = -1;if (1 == iM || 2 == iM){iM += 12;iY--;}iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;switch(iWeekDay){case0 : return"Sunday"; break;case1 : return"Monday"; break;case2 : return"Tuesday"; break;case3 : return"Wednesday"; break;case4 : return"Thursday"; break;case5 : return"Friday"; break;case6 : return"Saturday"; break;default : return NULL; break;}return NULL;}int main(){int year,month,day;char ch='1';while(ch != '\033'){printf("\n请输⼊⽇期:\n格式为:1900,1,1\n");scanf("%d,%d,%d",&year,&month,&day);const char * p = getWeekdayByYearday(year, month, day);printf("WeekDay : %s\n", p);ch = getchar();printf("\n");}}运⾏效果:$ ./getweekdaybyday请输⼊⽇期:格式为:1900,1,12008,4,29WeekDay : Tuesday请输⼊⽇期:格式为:1900,1,12015,2,4WeekDay : Wednesday请输⼊⽇期:格式为:1900,1,1编者注:⽤来算现在真实⽇期的星期是没有问题的。
sumif 条件参数周末-概述说明以及解释1.引言1.1 概述SUMIF函数是一种在Excel中常用的函数,用于按照指定条件对单元格范围进行求和计算。
通过SUMIF函数,用户可以快速、方便地对数据进行筛选和汇总,从而更好地分析和理解数据。
在日常工作和学习中,我们经常需要对数据进行分类统计,而SUMIF 函数的灵活性和高效性使其成为处理数据的重要工具。
本文将重点介绍SUMIF函数的条件参数及其在周末的应用,帮助读者更好地理解和掌握这一功能强大的函数。
1.2 文章结构本文将分为三个主要部分来介绍SUMIF函数在周末的应用。
首先,在引言部分将概述文章的主要内容和目的,以便读者对文章有一个整体的了解。
接着,在正文部分将分为三个小节来详细介绍什么是SUMIF函数、SUMIF函数的条件参数以及SUMIF函数在周末的应用。
最后,在结论部分将总结SUMIF函数的重要性,并探讨结论在实际应用中的价值,同时展望SUMIF函数在未来的发展方向。
整体结构清晰,逻辑严密,旨在帮助读者更好地了解SUMIF函数在周末的使用方法和意义。
1.3 目的:本文旨在探讨SUMIF函数在周末的应用,通过对SUMIF函数的条件参数进行深入分析和实际案例展示,为读者提供清晰的指导和实用的技巧。
通过本文的阐述,读者将能够更好地理解和掌握SUMIF函数的使用方法,达到提高工作效率和准确性的目的。
同时,我们也将展望SUMIF函数在未来的发展趋势,为读者提供更广阔的视野和思考空间。
通过阅读本文,读者将能够深入了解SUMIF函数的重要性和实际应用价值,从而更好地应用SUMIF函数解决实际问题,提升工作和学习的效率和质量。
2.正文2.1 什么是SUMIF函数SUMIF函数是一种在Excel中常用的函数,用于根据指定条件对数据进行求和。
该函数主要用于在一个范围内满足指定条件的数值进行求和。
其语法为SUMIF(range, criteria, [sum_range]),其中range表示要进行条件判断的数据范围,criteria表示要满足的条件,sum_range表示要进行求和的数据范围。
太阳日推算方法
太阳日推算法是一种用来确定一个特定日期是星期几的方法。
它属于年历类推算法,又被称为太阳历。
太阳日推算方法最早出现于古埃及,经过多文明的演变,直至今日仍被广泛运用。
本文将详细介绍太阳日推算方法的基本原理与具体实施步骤,以及它的独特之处与优势。
太阳日推算法利用太阳经过一个星期中不同日子而有所变化的
角度来判断某一日期是哪一天。
它依赖于太阳绕地球转动的规律,认为太阳每天以一定的角度把地球分割成星期的概念。
一周的星期从星期日开始,逐渐增加到星期六。
由于太阳轨迹周期性变化,这种太阳日推算法每隔一段时间就会有一个新的开始点,其标准则被称为“正朔”。
来看看太阳日推算法的具体实施步骤:
首先,一星期要从一个月的第一天开始计算,确定第一个星期日;
其次,确定“正朔”,即月份中太阳位置偏转了某个特定角度之后,开始新一周的开始日期;
最后,用“正朔”作为标准日,按照每一周的若干天移动的规则,计算出某一日期的星期即可。
太阳日推算法有着一些独特的优势:
首先,太阳日推算方法有效利用太阳绕地球转动的规律,可以更准确地确定某一日期是星期几;
其次,太阳日推算方法计算过程较简单,任何人都可以根据给定
的规则完成计算,在某种程度上可以满足大多数用户的需求;
最后,太阳日推算方法对于比较长时间段的日期,比如一年半以上的跨度,具有更好的准确性。
总之,太阳日推算方法基于太阳绕地球转动的规律,确定某一日期是星期几,具有准确性高、计算简单的特点,是一种在年历类推算中使用比较普遍的方法。
有了这种太阳日推算方法,完成一些对于星期的确定和推算就变得更加容易,也为人们在古代文明和现代社会历法上产生了深远的影响。
一、保质期算法保质期是指食品或其他商品可以保持其质量和安全性的时限。
在计算保质期时,我们通常需要考虑以下几个因素:1.生产日期:即商品生产的日期。
2.保质期长度:即商品的保质期时长,常以天数计算。
3.保存条件:不同的商品在不同的保存条件下,其保质期可能会有所不同。
根据上述因素,我们可以使用以下算法计算商品的保质期:1.判断保质期是否已过期:使用当前日期与商品的生产日期和保质期长度进行比较,如果当前日期大于(生产日期+保质期长度),则表示该商品已过期。
2.计算剩余保质期:使用当前日期与商品的生产日期和保质期长度进行比较,如果当前日期小于(生产日期+保质期长度),则剩余保质期为(生产日期+保质期长度)减去当前日期。
如果当前日期大于或等于(生产日期+保质期长度),则表示商品已过期,剩余保质期为0。
3.考虑保存条件对保质期的影响:不同的商品在不同的保存条件下,其保质期可能会有所不同。
因此,在计算保质期时,我们需要考虑商品需要存放在何种条件下。
例如,一些商品需要冷藏才能保持其质量和安全性,而其他商品可能只需要存放在常温下即可。
根据保存条件的不同,可能需要对剩余保质期进行相应的调整。
以上是简单的保质期算法,可以根据具体商品的特点和保存条件进行调整和优化。
二、出差算法出差是指人因公务需要离开工作地点,前往其他地点进行工作或出席会议等活动。
在计算出差时,我们通常需要考虑以下几个因素:1.出差开始日期:即出差活动开始的日期。
2.出差结束日期:即出差活动结束的日期。
3.出差天数:即出差活动的时长,通常以天数计算。
根据上述因素,我们可以使用以下算法计算出差天数:1.判断出差天数是否为0:如果出差开始日期等于出差结束日期,则出差天数为0。
2.计算出差天数:如果出差开始日期小于出差结束日期,则出差天数为出差结束日期减去出差开始日期的天数。
如果出差开始日期大于或等于出差结束日期,则出差天数为0。
以上是简单的出差算法,可以根据具体需求和出差方式进行调整和优化。
用生产日期+保质期=到期日期生产日期为2017年4月18日,保质期是45天,保质期到什么时候45天=1月14天5月份31天1、关于工程方面:工程队修一条路,7月28日开工,8月5日结束,一共用了多少天;这种题目,头尾两天都要算在内2、每年教师节9月10日到国庆节经过了多少天一般问“经过”,算头不算尾,头尾只算其中一天; 21天;3、同学们7月1日放假,8月31日到校报到,暑假一共多少天;这个题目,报道那天不算 31+30=61天4、从2012年12月31日到2013年12月31日经过了多少天经过——表示算头不算尾 2013年不是闰年,所以经过了365天;5、如果第4题目改成:从2012年12月31日到2013年12月31日共有多少天共有——表示头尾两天都要算在内 365+1=366天;6 、8月1日出差,8月11日回来,一共出差了多少天没有提到“经过”二字,代表头尾都算; 11天;7、会议从8月1日开始,8月11日结束,一共召开了几天这个,应该头尾都算,11天;1、算经过的天数:例题:小明的爸爸从3月6日到4月4日外出开会,会议多长时间分析:3月6日这天算开会时间,那么3月的6日之前的那5天就要去掉,三月份开会的天数是:31-5=26天;4月4日这天也算开会时间,那么四月份就有4天;26十4=30天小练习:从4月25日到6月13日有多少天跟上题一样,4月25日和6月13日这两天都要算在内4月的天数:30-24=6天5月的天数:31天6月的天数:13天合起来就是:6十31十13=50天2、算星期几例题:今天是4月21日,星期四,5月28日星期几方法一:21日这一天不算在内,从22日开始算到5月28日(1)算有多少天: 4月的天数:30-21=9天几天:9十28=37天237÷7=5个星期.....2天3余数是几,就从21日后面一天开始数几天:星期五、星期六;5月28日就是星期六;方法二:从21日21日包含在内算到5月28日1算有多少天:4月的天数:30-20=10天一共有几天:10十28=38天238÷7=5个星期.....3天3因为是从21日开始算的天数,那么余数是几,就从21日开始往后数几天:星期四、星期五、星期六;5月28日就是星期六总之,从哪天开始算天数,就从那天开始数余数;。