当前位置:首页 > 技术心得 > 正文内容

万年历星期算法分析

xjtudll17年前 (2009-12-10)技术心得22771
 
1、 蔡勒公式
  w=(y+[y/4]+[c/4]-2*c+[26*(m+1)/10]+d-1)%7               
考虑到取值范围,为使蔡勒公式中不出现负数,实际中可用以下公式:
c<99,2c<198,加上一个203,这样的话可以保证等号右边括号里不出现负数(203=29*7)。
  w=(203+y+[y/4]+[c/4]-2*c+[26*(m+1)/10]+d-1)%7
公式中符号含义如下:
  w:星期,w对7取模得。0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
  c:世纪-1(前两位数)
  y:年(后两位数)
  m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
  d:日
  [  ]:高斯符号,代表取整,即只要整数部分。
 
以上的公式都只适合于1582年(我国明朝万历十年)10月15日之后的情形。罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。
若要计算的日期是在1582年10月4日或之前,公式则为:
  w=(y+[y/4]+[c/4]-2*c+[26*(m+1)/10]+d+3)%7  
 
2、 对蔡勒公式的简化改进
 
w=([y/4]+y%7-2*(c%4)+m'+d)%7
此公式由冯思琮提供。
为避免出现负数,可用以下公式:
  w=(7+[y/4]+y%7-2*(c%4)+m'+d)%7
公式中除m'以外,其他符号的含义与蔡勒公式相同。
闰年1~12月修正值m'如下表:

月份
1
2
3
4
5
6
7
8
9
10
11
12
修正
5
1
2
5
0
3
5
1
4
6
2
4

注意:在平年的情况下,1月份的修正值为6,2月份的修正值为2。其他不变。
该公式同样只适用于1582年10月15日以后。
 
3、 HotPower菜农星期公式
  w=((c%4)*5+y+[y/4]+m'+d+2)%7
闰年1~12月修正值m'如下表:

月份
1
2
3
4
5
6
7
8
9
10
11
12
修正
3
6
0
3
5
1
3
6
1
4
0
2

注意:在平年的情况下,1月份的修正值为4,2月份的修正值为0(等同于7)。其他不变。
如果不想用查表的方式,可用以下公式:
  w=((c%4)*5+y+[y/4]+[(13*m+8)/5]+d)%7
此公式所有符号含义同蔡勒公式,m取3~14,某年的1,2月要看作上一年的13,14月。实际上该公式就是蔡勒公式转化而来。所以,该公式同样只适用于1582年10月15日以后。
 

 

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/14/

标签: 万年历算法
分享给朋友:
返回列表

没有更早的文章了...

下一篇:Multisim几则使用技巧

“万年历星期算法分析” 的相关文章

如何统计SQL语句查询出来的条数

可以通过count函数来实现。 sqlOne:select * from tablename1 where id>5;此语句查询出来多条记录,之后看做一个新的表。 sqlTwo:select conut(*) from (select * from tablename1 where id>...

OKI单片机——ML610Q4XX 串口

OKI单片机——ML610Q4XX 串口

串口配置过程: ① 配置接收引脚,选择P02或者P42 ② IO口配置成串口模式 ③ 选择时钟 ④ 配置成传输模式或者接收模式 ④ 配置校验方式、停止位和波特率 ⑤ 配置中断状态 void UART_Init(void) { //----配置IO口----// //TXD P43DIR = 0;/...

CC254x GAPBOND_IO_CAP_DEFINES ------ GAP Bond Manager I/O Capabilities的含义

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/62156.aspx #define GAPBOND_IO_CAP_DISPLAY_ONLY 0x00 //!< Display...

图腾柱(Totem Pole)输出电路

图腾柱(Totem Pole)输出电路

由于此结构画出的电路图有点儿像印第安人的图腾柱(图中左下角的照片),所以叫图腾柱式输出(也叫图腾式输出)。输出级分别采用一个NPN型晶体管和一个PNP型晶体管。NPN管集电极接正电源(或接地),发射极接下面PNP管的发射极,同时输出;PNP管的集电极接地(或负电源)。两管的基极同时接 前级的控制...

Proteus:Simulation is not running in real time解决方法

Proteus:Simulation is not running in real time解决方法

  Simulation is not running in real time due to excessive CPU load 如上图所示,相信这个问题很多人都碰到了。  网上说:原因是电脑CPU运行的速度跟不上单片机仿真的速度。解决方法:① ...

Virtual Box Android X86安装:please check you have enough free disk space to install androd x86

原因:下载的iso有问题,换一个iso吧。 当然,前提是你分配的空间确实是足够的,默认8GB肯定是足够的。 我分配了8GB空间,在写入的时候,却提示: Installation failed:please check you have enough free disk space to...

评论列表

去留无意
去留无意 IP:
15年前 (2011-11-22)

朋友说的对,所以当初我用的就是
w=([y/4]+y%7-2*(c%4)+m'+d)%7
其实计算结果出现负数的情况并不多。

xjtudll
xjtudll IP:
15年前 (2011-11-22)

“去留无意 ”:
您的公式虽然看起来简化了,但实际上对于程序来说,更复杂了。尤其是汇编。
因为*2只需要做移位运算,但是*5就复杂多了。

去留无意
去留无意 IP:
15年前 (2011-11-21)


蔡勒公式的改进公式也可表达为:w=([y/4]+y%7+5*(c%4)+m'+d)%7
比 w=(7+[y/4]+y%7-2*(c%4)+m'+d)%7 少一项呢:)
问好博主!

去留无意 IP: 回复:
朋友说的对,所以当初我用的就是
w=([y/4]+y%7-2*(c%4)+m'+d)%7
其实计算结果出现负数的情况并不多。
15年前 (2011-11-22)
xjtudll IP: 回复:
“去留无意 ”:
您的公式虽然看起来简化了,但实际上对于程序来说,更复杂了。尤其是汇编。
因为*2只需要做移位运算,但是*5就复杂多了。
15年前 (2011-11-22)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。