请问农历二十四节气的精确时间如何计算?

fail250aaa 2002-06-26 12:01:10
一个打印万年历的小程序,需要在每月下面注明该月所属的两个节气的精确时间,要

求能精确到分钟.
按道理节气的计算应该有一个固定的算法.比如平分成二十四等份,但是好象不正确,

不知道该如何计算,请多多指教,有代码更好,谢谢
...全文
3377 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pplhome 2002-08-18
  • 打赏
  • 举报
回复
由普科资讯开发出了一种最适合网站应用的,农历日期显示方案。

http://school.cnsun.com/share/wnlreadme.htm

方案主体基于存储在Microsoft Access建立的MDB数据上,其中存储了关于公历、农历对照的相关信息。

只要网站支持如ASP、PHP、JSP等任何一种角本语言,导入这个"公历、农历日期对照数据库",通过一般的查询就可以轻松显示当前的农历日期等信息了。

相对通常使用编程方法不仅减轻了开发难度,而且极大减低了系统占用量。

数据库存储了由公历转换成农历日期、节气、中外重要节日的信息。

以下网址提供了MDB数据库下载和更详细的说明:

http://school.cnsun.com/share/wnlreadme.htm
missbo 2002-07-02
  • 打赏
  • 举报
回复
以下内容经Bardo许可,摘自www.easthot.net

农历中最复杂的是节气。如果我们到网上查一下万年历,则会很轻松一查到JavaScript
的万年历。其中,就有个推节气日期的代码:
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173
149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,41
9210,440795,462224,483532,504758);

//===== 某年的第n个节气为几日(从0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 )
+ Date.UTC(1900,0,6,2,5) );
return(offDate.getUTCDate());
}
这段代码翻译成VB则是:
Public Function GetiTermDay(ByVal CurUnYear As Integer, ByVal iTerm As Integ
er) As Integer

Dim offDate As Double
Dim vTermInfo As Variant
'一个节气年的毫秒长度
Const sTermYearLen As Double = 31556925974.7

'求节气日期的定气常数(各个节气到小寒的分钟数)(如果能有人提供到秒的常数
就好了)
vTermInfo = Array(0, 21208, 42467, 63836, 85337, 107014, 128867, 150921,
_
173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033,
_
353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758)

'节气日的时差公式(时差为分钟)(从1900年大寒到现在这一节气的的分钟数)
offDate = (sTermYearLen * (CurUnYear - 1900)) / 60000 + vTermInfo(iTerm -
1)
'以DateDiff求出日期
GetiTermDay = Day(DateAdd("n", offDate, CDate("1900-Jan-06
02:05:00")))

End Function

其实,这个函数告诉我们的是:农历采用的是定气法,即各节气都有各自的定长。因为
采用这一法,以使农历在冬季没有闰月。而古代则是有过变气法的。如果你看《邵夫子
神数》,或者《千年历书》上面就有闰正月,闰冬月等。

而大小月则要与节气同步,因而,非冬季小月多。很可能一月就没有中气,于是下月就
是闰月。定气是按地球近日点与远日点速度不同而脂用的,这样即可以使一个节气都是
15度。

以上程序:当然,前者是用毫秒算的,后者则因数据大小的限制,只能用分钟来算。不
过,这个参数本身也是分钟的参数。

凭此,我们还不能知道交节的具体时间。如果要用程序算出来,则须要毫秒级的参数。
同时,要有节气交的的规则(即交于哪一时辰)若没有,只能是在程序中写入每一节气
的时间了。

如果我们都能知道以上所有参数,好象要写一个公农历转换程序,则不需要写入每一年
的具体数据了。

*****************************************************************
以下是本人的话:
Bardo所说是对的,农历采用的是定气。定气参数如果精确到毫秒,则会求出“准节气时间”,但是节气还有交的规则(我个人也是这么认为)如果没有,则我们可以从历书中求出定气的长,实际总有时间误差。即交,还在规则。
农历一天十二个时辰,不同年月不同是不会是一些时辰交节的。
所以,恐怕要找天文台负责历法的人才能弄明白。
fail250aaa 2002-07-02
  • 打赏
  • 举报
回复
up
zyl910 2002-06-26
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/454/454339.xml?temp=.3234674
心念不空过 2002-06-26
  • 打赏
  • 举报
回复
很麻烦,一般都是事先查好结果,然后直接调用显示。
fail250aaa 2002-06-26
  • 打赏
  • 举报
回复
up
fail250aaa 2002-06-26
  • 打赏
  • 举报
回复
看了,没有节气时刻的算法.泰山的那个代码我这里有,而且把原来的NongliData扩充到了2100年,请问节气怎么算

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧