2009年1月4日星期日

万年历真的“万年”么?_dzter的BLOG_新浪博客

万年历真的“万年”么? (2009-01-04 14:06:26)


忘记什么时候开始,网上流传了一段万年历的代码。看起来不错,于是被无数人或者公司做成产品放到网络上。我也是其中一个,稍适修改便放上了 http://wnl.owse.cn

一直用的挺爽,昨天闲得没事,在那扯春天的故事,说到农历2009年有两个春天:一个在公历2009年2月3日,一个在公历2010年2月4日。马上遭到反对说:应该是公历2009年2月4日。查了表,果然是4号,而非3号。这么说http://wnl.owse.cn的程序计算有偏差了。至少是50分钟的误差。(因为立春时间为4号零点49分48秒)。

今天仔细看了看代码,发现误差出现的原因:

1、程序使用了 0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758

来辨别从冬至开始的节气排列,单位为分。这是罪魁祸首,很不负责任的算法。



2、一般说太阳年应该平均为31556925999.9936毫秒,程序使用的31556925974.7毫秒。



很糊弄的解决方法是:

1、修改历年为2000年

2、修改节气间隔时间



负责任的解决方法

1、写个完整的节气计算,计算条件比较复杂,可能有上百项。

2、搞不定程序就下个千年内的节气数据库吧。



此次中招的有

百度:http://site.baidu.com/list/wannianli.htm

网易:http://mimg.126.com/assist/calendar/index.htm



据朋友说无数挂历台历同样有此错误。

看来今年N多挂历要当废纸卖了。



唉,程序员也是走了文人的道路,天下一大抄!

没有评论: