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

万年历星期算法分析

xjtudll17年前 (2009-12-10)技术心得24321
 
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://www.xjtudll.cn/Exp/14/

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

没有更早的文章了...

下一篇:Multisim几则使用技巧

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

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...

金蝶K3 怎么实现一个物品 对应多个供应商

金蝶K3 怎么实现一个物品 对应多个供应商

在基础资料里面的采购管理这一块,可以设定每个供应商供应的产品,而且每个供应商的产品可以重复。 虽然会有提示,确定就是了 没问题的...

XCode 模拟器完整分辨率截屏

XCode 模拟器完整分辨率截屏

选中模拟器 window-->去掉Show Device Bezels的勾选 -->Zoom 然后cmd + s 保存...

Android Studio:Your project path contains non-ASCII characters

Android Studio:Your project path contains non-ASCII characters

参考资料: http://stackoverflow.com/questions/32171968/your-project-path-contains-non-ascii-characters-android-studio 问题: Android Studio编译工程时,提示: Error:(1...

vc改变进度条颜色及去掉进度条边框

参考资料:http://blog.csdn.net/athemon/archive/2009/06/03/4238200.aspx 1、改变进度条颜色 SendMessage这个函数 代码如下:       m_Progress1.SendMessa...

Altium如何增加机械层

Altium如何增加机械层

Altium的机械层(Mechanical),默认只有一层,想多加几层吧,发现与Protel99SE大不相同,折腾了半天,总算是搞定了。 增加机械层步骤如下(以英文版为例,中文版大同小异): 1、在PCB界面,按L键(需先切换到英文输入法),弹出了板层配置的窗口。如图所示。 去掉【Only sho...

评论列表

去留无意
去留无意 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)

发表评论

访客

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