计算两个日期之间的星期日或星期六数量
- 格式:xlsx
- 大小:10.76 KB
- 文档页数:1
【转】给出年月日,计算星期几--算法及算法来历最常见的公式:W =[Y-1] + [(Y-1)/4] -[(Y-1)/100] + [(Y-1)/400] + DY是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
最好用的是蔡勒公式:W = [C/4]- 2C+ y + [y/4] + [13 *(M+1) / 5] + d- 1C是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。
两个公式中的[...]均指只取计算结果的整数部分。
算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
---------------------------------------------------------------------------星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。
在日常生活中,我们常常遇到要知道某一天是星期几的问题。
有时候,我们还想知道历史上某一天是星期几。
通常,解决这个方法的有效办法是看日历,但是我们总不会随时随身带着日历,更不可能随时随身带着几千年的万年历。
假如是想在计算机编程中计算某一天是星期几,预先把一本万年历存进去就更不现实了。
Access中的常用函数1.Count 函数计算查询所返回的记录数语法Count(expr)expr 占位符代表字符串表达式,它标识的字段包含了要统计的数据,或者是使用该字段的数据执行计算的表达式。
expr 中的操作数可包括表字段名或函数名(可以是固有的或者用户自定义的函数,但不能是其他 SQL 聚合函数)。
可以统计包括文本在内的任何类型数据。
说明可以使用Count来统计基本查询的记录数。
例如,可以通过Count来统计已发往特定城市的定单数目。
尽管 expr 能够对字段执行计算,但是Count仅仅计算出记录的数目。
记录中所存储的数值类型与计算无关。
Count函数不统计包含Null字段的记录,除非 expr 是星号 (*) 通配符。
如果使用了星号通配符,Count会计算出包括包含Null字段在内的所有记录的数目。
使用Count(*)方式比使用Count([Column Name])方式快很多。
不要用单引号 (' ') 将星号括起来。
下面的示例计算 Orders 表中的记录数目。
SELECT Count(*)AS TotalOrders FROM Orders;如果 expr 标识多个字段,那么Count函数仅统计至少有一个字段为非Null值的记录。
如果所有指定字段均为Null值,那么该记录不被统计在内。
可以使用 & 号分隔字段名。
下面的示例显示了如何将计算限于那些 ShippedDate 或 Freight 为非Null值的记录:SELECTCount('ShippedDate & Freight')AS [Not Null] FROM Orders;可以在查询表达式中使用Count。
也可以将该表达式用于QueryDef对象的SQL属性中,或者在基于 SQL 查询创建Recordset对象时使用该表达式。
2.Min、Max 函数返回包含在查询的指定字段内的一组值中的最小和最大值。
一、计算出要过多少天(若是同月,后面的日期-前面的日期;若是不同月,将所有月份的天数加起来,当月就用当月的天数减去当前日期)。
二、计算出多少周余多少天三、根据余数计算出是星期几当前日期加余数即为推算出的星期。
若和大于7,则用和再减去7的得数即为星期。
1、3月1日是星期六,3月15日是星期几?3月19日呢?第一问:求出经过了几天先算15-1=14(天)再算14÷7=2(周)也就是刚好过了2个星期。
所以3月15日还是星期六。
第二问:19-1=18(天)18÷7=2(周)……4(天),也就是两个星期多4天。
先看过了2个星期,还是星期六。
那么,现在就只要知道,再过4天是星期几就可以了。
6+4=10注意:如果加起来的数字大于7,应该减去7,才是星期几。
10-7=3所以,3月19日是星期三。
练习1:3月1日是星期六,求4月1日是星期几?(3月有31天)31÷7=4(周)……3(天)也就是四个星期多3天。
先看过了4个星期,还是星期六。
那么,现在就只要知道,再过3天是星期几就可以了。
6+3=99-7=2所以,4月1日是星期二。
练习2:4月2日是星期三,5月2日是星期几?5月7日呢?30÷7=4(周)……2(天)3+2=5所以,5月2日是星期五。
从5月2日到5月7日又过了:7-2=5(天)4月2日到5月7日一共过了:30+5=35(天)35÷7=5(周)所以,5月7日还是星期三5月1号星期二,那么5月29日是星期几?(29-1)÷7=4(个)星期二今天是星期三,再过30天是星期几?30÷7=4(个)……2(天)星期五某年2月份星期三的天数比星期二的天数多, 该月的14日是星期几?由题意可知:2月1日是星期三(14-1)÷7=1(个)……6(天)星期二今天是星期一,从今天起,第30天是星期()(30-1)÷7=4(个)……1(天)星期二有一天,小明很高兴地对妈妈说:“今天是您的生日,正巧是星期日,我们可以给您好好庆祝一下。
星期数的计算懂得公历日期变化规律的人都可以将一个日期的星期数计算出来,如果不知道正确的方法可能会很是麻烦。
现在我们给出一个方便的计算星期数的公式,为此首先规定:星期日=0,星期一=1,星期二=2,星期三=3,星期四=4,星期五=5,星期六=6另外注意闰年比平年多加的一天不是年头也不是年尾,而是在2月29日,所以为了计算方便,我们把3月作为一年的第一个月,4月作为一年的第二个月……而1月、2月则分别为去年的第十一个月和第十二个月。
作了这样的规定之后,1997年7月1日就要写为1997年“5月”1日,2000年1月2日就要写为1999年“11月”2日。
现在假定给出一个日期:N年m月d日(年份N=100c+y,其中c为世纪数,y为年代数),则该日期的星期数W=d+[ (13m-1)]+y+[ y]+[ c]-2c(mod7)其中方括号表示不超过这个数的最大整数,mod为数学符号,如a(modb)表示一个数,此数在0到b范围内(若b小于零,则在b到0范围内),若a∈[0,b),则a(modb) =a,若a不在0到b范围内,则a(modb)等于a加或减b的整数倍后处于0到b范围内的一个值。
这里值得注意的是,目前国际通用的公历是教皇格里高利十三实行的。
当时他召集了很多学者和僧侣讨论历法改革问题,决定采用业余天文学家利里奥的方案,没四百年去掉三个闰日。
公元1582年格里高利颁发改历的命令:(1)把1582年10月4日后的一天改为1582年10月25日;(2)那些世纪数不能被4整除的世纪年,如1700、1800、1900、2100、……不再作为闰年,仍算为平年。
这两条规定至为重要,第一条规定实质上把春分固定在3月21日左右,解决了日历与天时不符合的矛盾,第二条规定使历法的精度大大提高,保证了这种历法在相当长的时间里仍能实用。
根据这项规定,每400年中有97个闰年,总天数为365×400+97=146097(天)因此平均每年的长度为146097÷400=365.2425(天)这与回归年实际值365.2422天相差仅有0.0003天,换句话说,要经过3300多年,两者才有一天的相差。
如何计算某一天是星期几?——蔡勒(Zeller)公式历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。
(C是世纪数减一,y是年份后两位,M是月份,d是日数。
1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。
)算出来的W除以7,余数是几就是星期几。
如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1=49+[12.25]+5-40+[28.6]=49+12+5-40+28=54 (除以7余5)即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
过程的推导:(对推理不感兴趣的可略过不看)星期制度是一种有古老传统的制度。
据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。
从实际的角度来讲,以七天为一个周期,长短也比较合适。
所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。
余菲(浙江省衢州市巨化第一小学)小朋友,已知某一天是星期几,推算这一天之前或之后的某一天是星期几,可以按下面的步骤思考:(1)先算出两个日期之间经过的天数;(2)用经过的天数除以7,看余数是几;(3)推算未来的某一天是星期几,可根据余数是几,把星期数向后推几天;如果推算过去的某一天是星期几,可根据余数是几,把星期数向前推几天。
例题12023年4月20日是星期四。
(1)2023年4月的最后一天是星期几?(2)2023年的4月3日是星期几?(1)4月有30天,从2023年4月20日到2023年4月30日,经过了30-20=10(天)。
2023年4月20日是星期四,从4月20日开始,经过1天是星期五,经过2天是星期六,经过3天是星期日,经过4天是星期一,经过5天是星期二,经过6天是星期三,经过7天是星期四,经过8天是星期五,经过9天是星期六,经过10天是星期日,所以2023年4月的最后一天是星期日。
上文的计算很烦琐,你会发现,每经过7天是一个周期,所以也可以这样计算,10÷7=1(周期)……3(天)。
从4月20日开始,经过了1个周期多3天,因为1个周期后是星期四,再往后推3天是星期日,所以2023年4月的最后一天是星期日。
(2)从2023年4月3日到2023年4月20日经过了20-3=17(天),17÷7=2(周期)……3(天)。
从4月20日往前推2个周期还是星期四,再往前推1天是星期三,往前推2天是星期二,往前推3天是星期一,所以2023年的4月3日是星期一。
例题22023年的儿童节是星期四。
(1)2023年我国的建军节是星期几?(2)2023年的劳动节是星期几?(1)儿童节是6月1日,我国的建军节是8月1日。
先计算从2023年6月1日到2023年8月1日经过的天数。
6月有30天,从6月1日到6月30日经过了30-1=29(天),7月有31天。
从2023年6月1日到2023年8月1日,经过了29+31+1=61(天)。
算法系列:⽇历算法Copyright © 1900-2016, NORYES, All Rights Reserved.欢迎转载,请保留此版权声明。
---------------------------------------------------------------------------------------转载⾃1、概述⽇历在我们的⽣活中扮演着⼗分重要的⾓⾊,上班、上学、约会都离不开⽇历。
每年新年开始,⼈们都要更换新的⽇历,你想知道未来⼀年的这么多天是怎么被确定下来的吗?为什么去年的国庆节是星期五⽽今年的国庆节是星期三?那就来研究⼀下⽇历算法吧。
本⽂将介绍⽇历的编排规则,确定某⽇是星期⼏的计算⽅法,以及如何在计算机上打印某⼀年的年历。
要研究⽇历算法,⾸先要知道⽇历的编排规则,也就是历法。
所谓历法,指的就是推算年、⽉、⽇的时间长度和它们之间的关系,指定时间序列的法则。
我国的官⽅历法是中国公历,也就是世界通⽤的格⾥历(Gregorian Calendar),中国公历的年分为平常年和闰年,平常年⼀年是365天,闰年⼀年是366天。
判定⼀年是平常年还是闰年的规则如下:1、如果年份是 4 的倍数,且不是 100 的倍数,则是闰年;2、如果年份是 400 的倍数,则是闰年;3、不满⾜ 1、2 条件的就是平常年。
总结成⼀句话就是:四年⼀闰,百年不闰,四百年再闰。
中国公历关于⽉的规则是这样的,⼀年分为⼗⼆个⽉,其中⼀⽉、三⽉、五⽉、七⽉、⼋⽉、⼗⽉和⼗⼆⽉是⼤⽉,⼀个⽉有 31 天。
四⽉、六⽉、九⽉和⼗⼀⽉是⼩⽉,⼀个⽉有 30 天。
⼆⽉天数要根据是否是闰年来定,如果是闰年,⼆⽉是 29 天,如果是平常年,⼆⽉是 28 天。
2、计算星期除了年⽉⽇,⼈们⽇常⽣活中还对⽇期定义了另⼀个属性,就是星期⼏。
星期并不是公历范畴内的东西,但是⼈们已经习惯⽤星期来管理和规划时间,⽐如⼀个星期⼯作五天,休息两天等等,星期的规则彻底改变了⼈们的⽣活习惯,因此星期已经成为历法中的⼀部分了。
计算给定日期星期几好象是编程都会遇到的问题,最近论坛里也有人提到这个问题,并给出了一个公式:W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(要求将1、2月当作上一年的13、14月来计算)去看了看这个公式的原帖/ycrao/archive/2000/11/24/3825.aspx其讲述的过程并不清楚,便想怎样自己推导出一个公式来,花了几个小时,总算是弄出来了,结果跟上面的公式一样:)========================================================下面我们完全按自己的思路由简单到复杂一步步进行推导……推导之前,先作两项规定:①用y, m, d, w 分别表示年月日星期(w=0-6 代表星期日-星期六②我们从公元0年1月1日星期日开始一、只考虑最开始的7 天,即 d = 1---7 变换到w = 0---6很直观的得到:w = d-1二、扩展到整个1月份模7的概念大家都知道了,也没什么好多说的。
不过也可以从我们平常用的日历中看出来,在周历里边每列都是一个按7增长的等差数列,如1、8、15、22的星期都是相同的。
所以得到整个1月的公式如下:w = (d-1) % 7 --------- 公式⑴三、按年扩展由于按月扩展比较麻烦,所以将年扩展放在前面说①我们不考虑闰年,假设每一年都是365 天。
由于365是7的52倍多1天,所以每一年的第一天和最后一天星期是相同的。
也就是说下一年的第一天与上一年的第一天星期滞后一天。
这是个重要的结论,每过一年,公式⑴会有一天的误差,由于我们是从0年开始的,所以只须要简单的加上年就可以修正扩展年引起的误差,得到公式如下:w = (d-1 + y) % 7②将闰年考虑进去每个闰年会多出一天,会使后面的年份产生一天的误差。
如我们要计算2005年1月1日星期几,就要考虑前面的已经过的2004年中有多少个闰年,将这个误差加上就可以正确的计算了。