公曆轉換農曆演算法?
農曆轉換成公曆的計算公式?
因為公曆(現在用的是格里曆,以前還曾用儒列歷)和中國農曆都不是嚴格按一個公式計算得到的,所以兩個曆法沒有直接的公式。
試圖用一個簡單的公式,而不利用許多像萬年曆一樣的資料(儘管可以簡化),就達到公農曆轉換的目的,這是不可能的。我們能見到的所有公農曆轉換的軟體,都存有多少不等的一些年份的歷法資料。
這些資料之中,最重要的是農曆的每月天數。因為農曆是陰陽曆,陰曆部分(按月相編的部分)決定月日,陽曆部分(按太陽高度編的部分)就是節氣。節氣基本上是與公曆直接對應的,可以較容易的推算;但月相週期與地球公轉的關係相對複雜,一般都需要天文觀測資料授時,所以農曆每月是大月還是小月沒有簡單的公式。
至於公曆和農曆的置閏,倒都有一定的方式推算,並不困難。
如果只是天文資料,其實都還是可以算的——因為天文週期十分穩定,我們只要嚴格地按天文週期推算就可以了。可是還有更為麻煩的一點,就是公曆和農曆這些曆法,並不是完全嚴格地按照天文上的實際週期進行的,還有許多人為的因素。最著名的就是羅馬皇帝幾次修改2、8等月份長短,以及儒列歷中因計算不準確而人為地去掉了十天等事。中國農曆也有因為古代天文觀測不準確造成的政府頒佈的歷法與天象不吻合的(我們不能苛求古人觀測的精度)。所以這兩部曆法都是與一個時期社會有關的東西,也就沒有一定的規律可循了。
農曆轉換公曆對照表
是公曆1945年4月29日 星期日
農曆和公曆是怎麼轉換的?(怎麼算的?)
你是要口算還是要用筆算?
告訴你,這樣子算不靠譜的,根本算不出來,涉及到的轉換不是簡單的幾個公式能得出,相反,它的轉換相當複雜。
如果有興趣編寫程式的,我可以提供轉換函式庫,呼叫一個函式就可以實現農曆與公曆的互轉了。
目前我已經完美地實現了轉換,如果需要,我可以提供。
日期轉換為農曆日期的演算法是什麼
excel公曆轉農曆方法一:使用text函式 A列是公曆日期,我們在B1單元格輸入公式:=TEXT(A1,"[$-130000]yyyy年m月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"d"),下拉完成公曆轉農曆。
excel如何農曆轉換陽曆公式
比如今天是2010年9月2日,用以下公式就可以得出農曆七月二十四:
雖然在遇到閏月時,顯示結果有點差強人意,如下圖中,2010年2月9日的農曆應是十二月二十六,但因為那年有個閏五月,就無辜多出來一個月了。不過總比編程式碼要快捷多了吧,而且閏月也不是天天有。
假如把公式改成:=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子醜寅卯辰巳午未申酉戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年"&TEXT(A2,"[$-130000][DBNum1]m月")&TEXT(A2,IF(--TEXT(A2,"[$-130000]d")=10,"初十",IF(--TEXT(A2,"[$-130000]d")>10,"[$-130000][DBNum1]d","初[$-130000][DBNum1]d"))),那就更像農曆表示法了,不過因為農曆每年開始日期都不一樣,所以函式很難達到十分精確的結果,只能是將就著用。
實現陽曆轉陰曆演算法
下面是一個關於VB的農曆演算法
'日期資料定義方法如下
'前12個位元組代表1-12月為大月或是小月,1為大月30天,0為小月29天;
'第13位為閏月的情況,1為大月30天,0為小月29天;
'第14位為閏月的月份,如果不是閏月為0,否則給出月份,10、11、12分別用A、B、C來表示,即使用16進位制;
'最後4位為當年家農曆新年-即農曆1月1日所在公曆的日期,如0131代表1月31日。
Function GetChgDate(ByVal vDate As String, ByVal ChgType As 轉換方式) As String
Dim vvdate() As String = Split(vDate, "-")
If vvdate(0) > 2011 Or vvdate(0) < 1900 Then
Throw New NotSupportedException("本函式只提供1900年至2011年的日曆轉換!")
End If
Dim AddMonth, AddDay, AddYear, getDay, i As Integer
Dim RunYue As Boolean
Dim conDate As DateTime
Dim daList(2011) As String
daList(1900) = "010010110110180131"
daList(1901) = "010010101110000219"
daList(1902) = "101001010111000208"
daList(1903) = "010100100110150129"
daList(1904) = "110100100110000216"
daList(1905) = "110110010101000204"
daList(1906) = "011010101010140125"
daList(1907) = "010101101010000213"
daList(1908) = "100110101101000202"
daList(1909) = "010010101110120122"
daList(1910) = "010010101110000210"
daList(1911) = "101001001101160130"
daList(1912) = "101001001101000218"
daList(1913) = "110100100101000206"
daList(1914) = "110101010100150126"
daList(1915) = "101101010101000214"
daList(1916) = "010101101010000204"
daList(1917) = "100101101101020123"
daList(1918) = "100101011011......餘下全文>>
農曆與陽曆如何計算
陰曆陽曆轉換計算公式
1、陽曆日期推算陰曆日期的方法:
前已述及陰曆日期是以月亮的圓缺為計月單位,其以逢朔為初一,以月望為十五(大月為十六日),以月晦為二十九日(大月為三十日)。
如要知道1984年6月8日是陰曆幾日?可以利用公式推算陰曆日期: 設:公元年數-1977(或1901)=4Q+R
則:陰曆日期=14Q+10.6(R+1)+年內日期序數-29.5n (注:式中Q、R、n均為自然數,R<4) 例:1994年5月7日的陰曆日期為: 1994-1977=17=4×4+1
故:Q=4,R=1 則:5月7日的陰曆日期為: 14×4+10.6(1+1)+(31+28+31+31+7)-29.5n =204.2- 29.5n
然後用29.5去除204.2得商數6......27.2,6即是n值,餘數27即是陰曆二十七日 2.公曆換算為農曆
二十四節氣在黃道上的位置是固定的,但各年有平年和閏年之分,就使得迴歸年天數與實際天數不等,每年在日曆上可差一天。這樣可以將陰曆經過任意整迴歸年在現在的日曆上查到陽曆(陽曆一年相當陰曆的月數為 365.2422/29.530588=12.36827個月)。例如,可先在1995年的日曆上查得與(該年)陰曆對應的陽曆日期,這樣就找到了臨時落腳點,也就是找到了陰陽互換的關鍵。例如,可先以陰曆四月初一(日)為引數,在1995年日曆上查到對應的陽曆為4月30日。由於已經計算出經過的月數,將經過的月數的尾數(小數)化為日,加在4月30日上,就得到經過(1995-1070)整年數的陽曆日期,也就是起始陰曆日期對應的陽曆日期,即得到了待查的日期為4月30日加上0.64957×29.530588得到(1070年)5月19.1821840日。這樣就得到了所給例子的陰陽曆日期換算結果……”。 0.64957月的由來,
(1995-1070)×12.36827=11440.64957月
已知依澤公生於樑龍德二年(922)六月二十一日,依下表提供的2099年各月初一日的公曆月日數,可以算出龍德二年六月二十一日的公曆月日數 公元2099年農曆各月初一日的公曆月日
(2099-922)× 12.36827=1455.45379月
餘數為 0.45379月 × 29.530588日=13.4O日
因2099年五月初一日(包括該年闖二月)在公曆6月19日,加上計算所得的13日為龍德二年六月初一日的公曆月日,即該年7月2日,則該年農曆六月二十一日為該年7月22日。
3.計算結果的訂正
實際上上列公曆換算為農曆時常有較大的誤差,如熙寧三年四月初一日為公曆1070年5月13日,而不是5月19日。通過中國曆法所用的於支記日法求算所用兩歷的干支,對所求結果加以訂正。
如,馬依澤公生於回曆310年3月20日,自回曆曆元起算共歷日數為: 自回曆元旦至其3月20日,共歷79日。
自回曆元年元旦至309年元旦,共歷113個閏年196個平年。又回曆曆元在公曆622年7月16日,已知該日的干支序數為50,癸丑日,減1(因自甲子起算),餘49應加入下列算式中,
(309 × 354+113+79+49)÷60=1827.116667 ......餘下全文>>
在EXCEL中怎樣把公曆轉換成農曆
Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate
Private Sub Form_Load()
'獲取當前系統時間
curTime = Now()
'星期名
WeekName(0) = " * "
WeekName(1) = "星期日"
WeekName(2) = "星期一"
WeekName(3) = "星期二"
WeekName(4) = "星期三"
WeekName(5) = "星期四"
WeekName(6) = "星期五"
WeekName(7) = "星期六"
'天干名稱
TianGan(0) = "甲"
TianGan(1) = "乙"
TianGan(2) = "丙"
TianGan(3) = "丁"
TianGan(4) = "戊"
TianGan(5) = "己"
TianGan(6) = "庚"
TianGan(7) = "辛"
TianGan(8) = "壬"
TianGan(9) = "癸"
'地支名稱
DiZhi(0) = "子"
DiZhi(1) = "醜"
DiZhi(2) = "寅"
DiZhi(3) = "卯"
DiZhi(4) = "辰"
DiZhi(5) = "巳"
DiZhi(6) = "午"
DiZhi(7) = "未"
DiZhi(8) = "申"
DiZhi(9) = "酉"
DiZhi(10) = "戌"
DiZhi(11) = "亥"
'屬相名稱
ShuXiang(0) = "鼠"
ShuXiang(1) = "牛"
ShuXiang(2) = "虎"
ShuXiang(3) = "兔"
ShuXiang(4) = "龍"
ShuXiang(5) = "蛇"
ShuXiang(6) = "馬"
ShuXiang(7) = "羊"
ShuXiang(8) = "猴"
ShuXiang(9) = "雞"
ShuXiang(10) = &q......餘下全文>>
如何把農曆轉成陽曆,求演算法
int lunarInfo[]={/*陰曆資料*/
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0};
int solarMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
//---------------------------------------------------------------------------
int lYearDays(int y) {
int i, sum = 348;
for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-190......餘下全文>>