带黄历和农历的万年历 老黄历带农历的万年历带每日生肖

名鹏文化传媒

本文向给大家分享带黄历和农历的万年历相关知识,同时小编也会对老黄历带农历的万年历带每日生肖进行解释,如果能解决您在带黄历和农历的万年历方面面临的问题,请收藏关注本站,现在开始吧!

C语言编写一个带农历的万年历

农历算法太复杂了,我查了一下,有个人写出来了,但是我怎么看也看不懂,不知道你能不能看懂! (只是探讨一下,我也想写个农历算法)
首先,我们要确定一个时刻,作为一天的起点(包括这个时刻)。然后我们以月亮通过朔望交界点的那一
天作为每个月的第一天,以太阳通过雨水点的那个月作为正月,依次的,以太阳通过各中气点的那个月作为
二月、三月等等。 经过长期的观察之后,我们就会发现每个月不是29天就是30天,每年不是12个月就是13
个月,每个中气点唯一对应一个月 ,但是有的月却没有中气。为了制定我们的历法,我们至少要知道足够
精度的朔望月长度, 记为ML,和两个中气的间隔时间记为YL,这两个值经过前人长期不懈的观测和计算,
我们知道分别为29.5306日和30.4377日。 接下来,我们要随便找到某一年,以太阳通过雨水点的时刻到
那一年开始的那个时刻的时间,记为DY,以日为单位, 还要找出这一年正月里,月亮通过朔望交界点的时
刻到那一月开始的那个时刻的时间,记为DM,以日为单位。这两个值是要通过实地观测得出来的。 这个时候
,我们就可以通过递推来制订我们的历法,以预测未来月球和太阳的运行情况,并进一步预测月相的变化和
气候的变化。
在本算法中我们使用了三个近似处理:
每天的长度总是一样的;
每个朔望月的长度总是一样的;
每两个相邻中气的时间总是一样的。
接下来,我们就逐月推算每月的大小:
Select Case Fix(DM + ML)
Case is = 29
The month have 29 days.
The DM of next month is DM + ML - 29.
Case is = 30
The month have 30 days.
The DM of next month is DM + ML - 30.
End Select
每年中各月的月份、是否为闰月
For i = 1 to 12
This month has A days.
If DY>=A Then
This month is an Extra Month.
DY = DY - A
Else
This month is the i Month.
DY = DY + YL - A
i = i + 1
End If
Next
这就是我们的核心算法。通过它,我们可以从任何一个包含中气的月份开始向后推算各月各年的情况。
由于我们所用的DM、DY、ML、YL都是近似值,若干年后,我们的历法必有偏差,我们只要重新观测,
更新DM、DY、ML、YL的值就可以了。事实上,诸朝气数最多不过400年,在这些值精确到万分位的时候,
通行一朝是完全可以的。
下面对大小月的排列和闰月的出现作一些定性分析
显然0≤DM<1,那么
DM<0.4694时,当月为小月,下月为大月
DM≥0.4694时,当月为大月
DM<0.4694 * 2时,下月为小月,下下月为大月
DM≥0.4694 * 2时,下月亦为大月,下下月为小月
所以,大小月一般是交替出现,有时会出现连续两个月是大月的情况,但不会出现连续三个
月或更多的是大月的情况,也不会出现连续两个月更多的是小月的情况。也就是说,一般是小月大
月相继出现一段时间后,接着就出现一个大月,然后又是小月大月相继出现,具体的间隔也不定,
大家可以通过计算机推算后,找点规律出来。
一年中最少有十二个月,因为YL * 12 (代表十二个中气循环一次的时间)> ML * 12
(代表十二个朔望月的时间) + 1 (第一个月的DM总小于1),最多有十三个月,因为30
(第一个月的DY总小于30) + YL * 12 < ML * 14。两个相邻中气的间隔时间大于30,
所以一个月不可能有两个中气,那么一年有十二个月的时候,12个中气必然刚好依次各居一个月,
这一年就称为平年,一年有十三个月的时候,必然有且仅有一个月没有中气,那个月就时闰月,
这一年就称为闰年。平年的时候,根据大小月的排列规则,一年最多有8个大月,最少有6个大月,
因为ML * 12 + 1 < 30 * 8 + 29 * (12 - 8),所以不可能有8个大月,最多为7个大月,
那么一年就为354或355天。闰年的时候,根据大小月的排列规则,一年最多有9个大月,
最少有6个大月,因为ML * 13 + 1 < 30 * 8 + 29 * (13 - 8),所以不可能有8个或更多的大月,
最多为7个大月,那么一年就为383或384天。
因为每月的天数不固定,所以闰月的出现规律也不好讨论,连续十二个月的天数也不固定,
所以闰年的出现规律也不好讨论。不过可以肯定是,每年的第一个月肯定不是闰月,因为我们
是以包含中气雨水的月份作为正月,也就是每年的第一个月的。所以,闰月必定出现在某个有
名字的月份后面,出现在哪个后面就叫闰哪月。

以上就是与带黄历和农历的万年历以及老黄历带农历的万年历带每日生肖的相关内容,也是关于C语言编写一个带农历的万年历的分享。看完带黄历和农历的万年历一文后,希望这对大家有所帮助!