普通人如何分辨公历、农历、阴历和阳历?
阳历:
阳历是根据地球围绕太阳公转来设计的历法,这种历法起源于西方,古埃及人已经开始使用。古埃及历每月30天,一共12个月,年底增加5天的新年,一共是365天。公转的一个回归年是365.2421897天,所以每隔4年就会少了一天。古埃及历没有闰年,所以每隔1460年就会多出一年,被称之为“天狗周期”。阴历:
古代人对于太阳的观察能力比较弱,对于月亮的观察能力比较强。所以,更多的地方使用的是阴历,也就是通过月亮的月相周期来计算的历法。一般来讲分成大小月,大月30天,小月29天。月亮绕地球转动一周周期为29.5306天。一般阴历中设定没有月亮的夜晚就是三十和初一,满月就是十五。
农历:
阴历确定容易,但是农作物的生长需要按照阳历来确定。所以单纯使用阴历的国家不多,基本上都是阴阳历。中国传统历法农历就是阴阳历,一方面是通过月相来确定的阴历,另一方面通过推算阳历的节气。阴阳历需要兼顾到阴历和阳历,所以要求较高,古人推算的历法经常每隔一段时间就会因为误差过大而失效。直到近代,西方阳历传入之后,有了更先进的推算手段,才确定下来。南京紫金山天文台通过先进手段,参考国际天文成果,对清代的时宪历进行修正,推出了紫金历。
公历:
古罗马人早期使用的是阴历,称之为儒略前历。这是因为在公元前46年,凯撒在希腊天文学家的建议下,修改历法,启用阳历的缘故,这个历法称之为儒略历。儒略历一直使用到1582年,因为闰年误差的缘故,被教皇废除。教皇格里高利推行了新的历法,即现行的阳历格里高利历。因为格里高利历后来随着西方文明的崛起传播到世界各地,成为大家公认的历法,所以称为公历。
结论:中国农历兼顾了太阳与月亮的运行规律,在年的时间计算上,尽量接近于回归年,能完整准确地反映四季变化;在月的时间计算上,尽量接近朔望月,能准确地反映月相的盈亏。如此,中国的历法既能指导农业生产、天时变化(太阳历的专长)又能反映月亮对人体内部的影响(阴历的专长)。
当前中国大陆仍然是公历和农历并行,在日常生活中使用公历,在民间使用农历。现行的公历是格里高利历,现行的农历是经过修正的紫金历(由南京紫金山天文台推算的历法)。
以下网址是3个历法与公历的转换和查询:
犹太历:
https://cn.calcuworld/%E7%8A%B9%E5%A4%AA%E6%97%A5%E5%8E%86
伊斯兰历:
https://islam.bmcx/2022-01-01__islam/
伊朗历:
https://cn.calcuworld/%E6%B3%A2%E6%96%AF%E6%97%A5%E5%8E%86
网上有一些伊斯兰历的日期计算有错误,以上面网址的转换为准。
华夏历的年份:公历+2697(春节至元旦期间)、公历+2697-1(元旦至春节期间)
华夏历的日期:农历
犹太历年份:公历+3760
华夏历:
中国的农历,古时称为夏历,创立于夏代,现代才把名称改为农历,中国的道历(道家专用历法)是以夏历为准,道历的起始元年是黄帝纪元(公元前2697年)开始。2697这个数字不是现在才有,在道家内部用了很久。由于历法的原因,中国也叫中华或者华夏,中国夏历也叫中华夏历,简称为:华夏历。
历:
世界通用的公元历,原称为历,源于西方,也称为西历、格里历。起始元年以耶稣诞生的那年开始。西方将历推广到全世界各国之后,为了淡化宗教色彩,改名称为公元历,简称为公历。中国是在辛亥革命爆发后的次年(1912年),当时的政府采用公历作为国历,但公历实际上就是历。
犹太历:
犹太历也称为希伯来历,要用于世界各地的犹太人群体。起始元年是以上帝创世开始,这一做法始于中世纪,源于当时人们对《圣经》的研究。犹太历年份:公历年+3760,如果你记不住3760这个数字,有一个方法可以记住,2014年的马航MH370客机失联,370这个数字加上6,就是3760。犹太历的第12月的名称是亚达月,亚达月实际有2个,第二亚达月实际上是第13月,也就是说,与其它历法共12个月不同的是,犹太历有一些年份是13个月。
伊斯兰历:
伊斯兰历源于圣经历法,使用于多数的伊斯兰教的地区。在中国称为回历。
伊朗历:
伊朗历也称为波斯历,使用于伊朗和阿富汗等国。
Public Function LTG(Optional xx_date As Date, Optional irow As Integer) '农历转公历
Dim LunarYear, LunarMonth, LunarDay
Dim NongliData(100)
'农历数据
NongliData(0) = 2635
NongliData(1) = 333387
NongliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NongliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NongliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NongliData(18) = 3221
NongliData(19) = 3402
NongliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NongliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NongliData(30) = 2901
NongliData(31) = 330421
NongliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NongliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 461653
NongliData(48) = 1386
NongliData(49) = 2413
NongliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NongliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
NongliData(100) = 1706
Dim m, monthCount, toCurMonthCnt, LeapMonth, theDate, curTime
Dim i1, i2, i3, bit
'获取当前变量日期
curTime = xx_date
'LunarYear = Year(curTime)
LunarYear = Year(Now())
LunarMonth = Month(curTime)
LunarDay = Day(curTime)
m = LunarYear - 1921
monthCount = 0
toCurMonthCnt = 0
LeapMonth = -1
theDate = LunarDay - 1
For i1 = 0 To m - 1 Step 1
If (NongliData(i1) < 4095) Then
monthCount = 11
Else
monthCount = 12
End If
For i2 = 0 To monthCount Step 1
bit = NongliData(i1)
For i3 = 1 To i2 Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
theDate = theDate + 29 + bit
Next
Next
If (NongliData(m) < 4095) Then
monthCount = 11
toCurMonthCnt = monthCount - LunarMonth + 2
Else
monthCount = 12
toCurMonthCnt = monthCount - LunarMonth + 1
LeapMonth = Int(NongliData(m) / 65536)
If LunarMonth <= LeapMonth Then toCurMonthCnt = toCurMonthCnt + 1
End If
For i2 = monthCount To toCurMonthCnt Step -1
bit = NongliData(m)
For i3 = 1 To i2 Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
theDate = theDate + 29 + bit
Next
LTG = DateAdd("d", theDate, "1921/2/8")
If irow = 1 Then
Sheet1.Cells(1, 10) = "'" & LTG
Else
Sheet1.Cells(irow, 4) = "'" & LTG
End If
End Function
Private Sub CommandButton1_Click()
If IsDate(Sheet1.Cells(1, 9)) = True And IsNull(Sheet1.Cells(1, 9)) = False And Sheet1.Cells(1, 9) <> "" Then
aaa = LTG(Sheet1.Cells(1, 9), 1)
End If
Dim i As Integer
For i = 2 To 100
Sheet1.Cells(i, 4) = ""
If Sheet1.Cells(i, 2) <> "" And IsNull(Sheet1.Cells(i, 2)) = False And IsDate(Sheet1.Cells(i, 2)) = True Then
If Sheet1.Cells(i, 3) = "Y" Then
bbb = LTG(Sheet1.Cells(i, 2), i)
Else
Sheet1.Cells(i, 4) = "'" & Sheet1.Cells(i, 2)
End If
Else
Application.DisplayAlerts = False
Application.Quit
End If
Next i
End Sub