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

万年历星期算法分析

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

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

Qt无法定位程序输入点

Qt无法定位程序输入点

       Qt发布程序的时候,运行exe文件(位于release文件夹),提示Qt无法定位程序输入点于动态链接库QtCore4.dll上,如图所示。   碰到这个问题,当然第一件事是在\Qt\2009.05...

Android Warning: Converting to string: TypedValue …

参考资料:   http://stackoverflow.com/questions/4903948/android-resources-converting-to-string-typedvalue-warning   问题:   切换activity...

NSButton——设定背景图片Scale

NSButton——设定背景图片Scale

参考资料: http://stackoverflow.com/questions/5851923/how-to-scale-axes-independently-at-runtime-on-an-nsbutton 代码方式: NSButton *someButton; NSButtonCell...

群晖安装OnlyOffice

群晖安装OnlyOffice

1、拉取镜像ssh  admin@201.201.201.168cd /volume1/dockersudo docker pull onlyoffice/documentserver 2、安装onlyoffice,注意配置端口本地端口与已用的不冲突即可 3、关闭密钥否则每次都提...

运放和比较器的区别及比较器技术参数

1、运放和比较器区别 (1)放大器与比较器的主要区别是闭环特性 放大器大都工作在闭环状态,所以要求闭环后不能自激。而比较器大都工作在开环状态更追求速度。对于频率比较低的情况放大器完全可以代替比较器(要注意输出电平),而比较器大部分情况不能当作放大器使用。 因为比较器为了提高速度进行优化,这种优化却减...

如何给程序添加超大图标(EXE大尺寸图标)

如何给程序添加超大图标(EXE大尺寸图标)

要点:1、制作多分辨率ICON文件2、清空图标缓存,使图标文件生效 自己写的程序,如果更换了图标,编译出来,超大图标显示就会发现图标并没有跟着放大。那么问题来了,就换个图标效果就不同了,很明显时图标有问题。用eXeScope打开vs2013编译出来的MFC对话框程序可以看到如下图:这不止一...

评论列表

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

发表评论

访客

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