# 农历和阴历的差别
- 阴历 = 太阴历的简称。是根据月球围绕地球运转的周期(约等于 29.5 天)制定的历法。大月 30 天,小月 29 天,12 个月为 1 年,1 年 354 天或 355 天。伊斯兰教历就是阴历的一种。
- 农历 = 中国传统历法。因其与农业生产有关,故称。相传始行于夏代,所以也叫夏历。属阴阳历,人们习惯上把它叫阴历。平年 12 个月,闰年 13 个月。大月 30 天,小月 29 天,平年全年 354 天或 355 天,闰年全年 383 天或 384 天。每年分 24 个节气,便于农事安排。以天干地支搭配纪年,60 年周而复始
# 年的计算方式
按照公历一年会有 365.2422 如果我们计算 365 天 那每年就会多 0.2422 天,因此当 0.2499*4 年 = 0.9996, 就会接近多出一天,而这一天就是四年一度的(闰年)二月 29,但是它是 0.9996 所以每一百年会多出一天,而该年就不计算成闰年,而 400 年后则是计算润年当中
# 月的计算方式
初一 = 塑 ,十五 = 望 加起来则是塑望月,一共 29.53 天 * 12 月 = 354.36 days,那么按照 (一年) 365.2422-354.36 = 会多出 10.8822 天 ,再 * 3 的话就接近一个月,所以三年可以补一个月 但是 10.8822 乘 3 也不等于 29.53 天,所以古人计算最好的补月方式是 19 年补 7 个月,而这七个月就是润月。
- 因为 19*365.2422(年的转动天数)=6939.6018 天
- 而 29.53 * 12 * 19 + (7 个闰月 * 29.53) =6939.55
- 误差相当的小,所以每几百年就会调整一次这个误差
因为 29.53 为一个月,因此古人划分一些 29 天为小月,30 天为大月(不固定,根据天文观测)
# 24 节气
前面提到的七个闰月是通过 24 节气来补,一年地球转动 360 度 / 24 = 每个节气等于 15 度,
分别名字为 =
立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒
24 节气分成节气和中气,隔着来,立春节气,那么雨水就是中气,下一个就是节气。
计算润月的方式,就是每月绑定一个中气,当中气的日期是在该月里的初始日期和终止日期之间,那么就不需要闰月,而当中气的日期不在该月里的初始日期和终止日期之间,该月就是润月,如果是在四月就叫润四月,那么原本中气就会在下个月出现。
# 节气计算公式
节气和中气的准确日期是按照以下公式来实现,准确度只在 1900-2100 年之间,资料参考 [1]
import math
day_in_month =[31,28,31,30,31,30,31,31,30,31,30,31]
def F(y,x):
return 365.242 * (y-1900) + 6.2 + 15.22 * x - 1.9 * math.sin(0.262 * x)
#判断闰年
def is_leap_year(year):
if year % 400 == 0:
#看看能不能被400整除
return True
elif year % 100 == 0:
return False
elif year % 4 == 0:
return True
else:
return False
def gets_days_in_month(year,month):
if is_leap_year(year) and month == 1:
return days_in_month[month] +1
else:
return days_in_month[month]
def days_to_geogorian_date(n):
#:parameter n:num days from 1900-01-00
y = 1900
m = 0
while n > get_days_in_month[y,m]:
n =n - get_days_in_month[y,m]
m = (m + 1)%12
if m == 0:
y = y + 1
year = y
month =m + 1
day = n
return year, month , day
for i in range(0,4):
days = init F(1900,i)
y , m , d = days_to_geogorian_date(days)
print("{}年{}月{}日",format(y,m,d))
#Output = 1月6日 (意思是1900年一月6号就是第一个节气)/1月20日/2月4日/2月19日
# 朔日的计算
那么每月的初始日期和终止日期怎么算呢,就要用到以下公式了
https://wenku.baidu.com/view/3a29278471fe910ef12df84d.html ↩︎