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

万年历星期算法分析

xjtudll17年前 (2009-12-10)技术心得21261
 
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几则使用技巧

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

OSAL系统如何写中断服务函数

OSAL系统如何写中断服务函数

参考资料; http://bbs.21ic.com/icview-192248-1-1.html 问题: OSAL添加中断服务程序的时候编译报错 提示:Error[Pa045]: function "T4_ISR" has no prototype 但是定时器中断实验程...

Quartus II 中管脚上拉电阻(弱上拉)的设置方法

Quartus II 中管脚上拉电阻(弱上拉)的设置方法

参考资料: http://blog.sina.com.cn/s/blog_706f04d20100oelx.html 由于系统需求,需要在管脚的内部加上上拉电阻,目的是为了有个固定的初始状态。 以Quartus II 11.0为例,具体过程如下: 1、在菜单Assignments 中选择Assig...

金蝶K/3BOS取得字段值改变之前的原值

通过GetFieldValue函数只能取得字段改变后的值,但是有时候需要在字段值改变后,取得之前的原值。以下为具体代码: Dim dct As KFO.Dictionary = m.GetDataFldbyKey('FDecimal7', Row) Dim sdOld As Doubl...

Multisim几则使用技巧

Multisim几则使用技巧

  Multisim是加拿大图像交互技术公司(Interactive Image Technoligics简称IIT公司)推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。 这两天...

系统能识别光盘,双击打不开

操作系统:Windows 7 现象:自己刻录的一张光盘,放进光驱后,能识别光盘,但是双击后无任何反应。 原因: 这个问题是Win7的一个功能导致的,启用将可能导致无法浏览打开光盘目录,只能加载自动运行程序或自动播放媒体文件,如果没有则无法使用,禁用此功能即可解决问题。 解决方法: 1...

Eclipse导入Android工程,出现default与Displaying的问题解决

Eclipse导入android工程时出现如下提示: [15:04:03 - XXX] 'default' is not a best match for any device/locale combination.  [ 15:04:03 - XXX] Displaying it wi...

评论列表

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

发表评论

访客

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