陽曆農曆怎麼轉換?

General 更新 2024年05月03日

農曆和公曆是怎麼轉換的?(怎麼算的?)

你是要口算還是要用筆算?

告訴你,這樣子算不靠譜的,根本算不出來,涉及到的轉換不是簡單的幾個公式能得出,相反,它的轉換相當複雜。

如果有興趣編寫程式的,我可以提供轉換函式庫,呼叫一個函式就可以實現農曆與公曆的互轉了。

目前我已經完美地實現了轉換,如果需要,我可以提供。

農曆和陽曆轉換有什麼規律啊?

沒有。陽曆是以地球圍繞太陽公轉一週的時間(即:365天5小時48分46秒,也就是365.2422天)為一年,為曆法方便定為365天(稱為平年),捨去0.2骸22天,捨去的0.2422天,每4年累加為0.9688天,將近一天。因此,每四年加一天,既加在能被4整除的年份上,這一年為366天(稱為閏年,即:2月份為29天),每四百年少3.12天,也就是少三個閏年,所以逢百年時,既要被4整除也要被400整除才為閏年。也就是我們通常所說的: 四年一閏,百年不閏,四百年再閏。

贊助廣告

農曆則是以月亮圍繞地球公轉一週的時間(即:平均29天12小時44分)為一個月,12個月算一年,為354天。每三年有一個閏月年,閏月年是383天或384天。19年7個閏月年。一般情況19年陽曆和陰曆(19被數年)能碰到一起或只差一天。

公曆和農曆是如何換算的?

每月初一叫做朔,最後一日叫做晦。農曆十五或十六或十七叫做望,望的後一天叫做既望 所以每年春節的大年三十並不在同一天。農曆的基礎是「迴歸年」和「朔望月」。「迴歸年」是太陽接連兩次通過春分點所需的時間,即365.2422日(365日5小時48分46秒)。「朔望月」是月球接連兩次朔(新月)或兩次望(滿月)相隔的時間,即29.5306日(29日12小時44分3秒)。

贊助廣告

由於12個「朔望月」只有354.3672日,跟「迴歸年」的365.2422日相差超過10日,把相差累積起來便成為閏月。早在公元前五、六百年的春秋時代,中國曆法便採用十九年七個閏月的安排

但中國的農曆和西藏的農曆以及韓國的農曆計算方法不一樣,一般要相差一二天。

陰曆日期是以月亮的圓缺為計月單位,其以逢朔為初一,以月望為十五(大月為十六日),以月晦為二十 九日(大月為三十日)。然而目前記時通常用陽曆日期表達,如欲將陽曆日期換算成陰曆日期可以用以下兩種方法:其一是查《新編萬年曆》,如查1984年6月8日是陰曆幾日?翻開萬年曆6月10日是陰曆十一,則逆推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+30+7)-29.5n

=204.2- 29.5n

然後用29.5去除204.2得商數6......27.2,6即是n值,餘數27即是陰曆二十七日。

在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......餘下全文>>

Excel 中陽曆日期如何轉換成陰曆日期?

2007版的excel可用下面公式轉換:

=TEXT(A1,"[$-130000]yyyy年m月"&IF(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"d")

電子表格中怎樣將農曆轉換為公曆

1、農曆轉換為公曆,首先需要一個農曆和公曆的對照表

2、假設對照表的格式為:A列為農曆,B列為公曆。

3、此時可以用VLOOKUP函式進行轉換,公式為:=VLO暢KUP(需要轉換的農曆日期,A:B,2,0)

4、特別注意:需要轉換的農曆日期必須與對照表中A列格式一致。

想知道農曆生日如何轉換成公曆生日?

85年農曆9月2日生日公曆是85年10月15日,星座是天秤座(9月23日—10月22日)公曆85年9月2日,農曆是85年7月18日,星座是處女座(8月23日—9月22日)

星座是按照公曆來計算的

農曆日期和公曆日期怎麼轉換,

我做計算器的,這個就是轉化,你看哈嘛!

//將日期換算為公曆的天數

private int toJulian(){

int jy=year;

if(year<0)

jy++;

int jm=month;

if(month>2)

jm++;

else{

jy--;

jm+=13;

}

int jul=(int)(java.lang.Math.floor(365.25*jy)

+java.lang.Math.floor(30.6001*jm)+day+1720995.0);

int IGREG=15+31*(10+12*year);

if(day+31*(month+12*year)>=IGREG){

int ja=(int)(0.01*jy);

jul+=2-ja+(int)(0.25*ja);

}

return jul;

}

//從具體的天數得到日期

private void formJulian(int j){

int ja=j;

int JGREG=2299161;

if(j>=JGREG){

int jalpha=(int)(((float)(j-1867216)-0.25)/36524.25);

ja+=1+jalpha-(int)(0.25*jalpha);

}

int jb=ja+1524;;

int jc=(int)(6680.0+((float)(jb-2439870)-122.1)/365.25);

int jd=(int)(362*jc+(0.25*jc));

int je=(int)((jb-jd)/30.6001);

day=jb-jd-(int)(30.6001*je);

month=je-1;

if(month>12)

month -=12;

year=jc-4715;

if(month>2)

--year;

if(year<=0)

--year;

}

private int day;

private int month;

private int year;

c++中怎樣將陽曆轉化成農曆

一、 原理篇

1. 公曆轉換農曆的演算法

公曆(Gregorian Calendar)與農曆(Chinese Lunar Calendar)的轉換關係不是一個簡單的公式就可以完成,其中的轉換比較複雜,原因是農曆的制定相當複雜,是根據天文觀測進行指定的。

比較常用並且比較簡單的公曆轉換農曆演算法就是查表方法。首先要儲存公曆農曆的轉換資訊:以任何一年作為起點,把從這一年起若干年的農曆資訊儲存起來(在我的C++類中,是從1900年作為起點的。選擇一個起始點的思想十分重要,在下面的干支紀法和二十四節氣中也體現到了)。回想一下,我們平時是怎樣來轉換公曆農曆的呢?是查閱歷書,曆書中有每一天的公曆農曆,直接一查就可以了。那麼我們可不可以也這樣做呢?當然可以,但是這樣做要收錄每一天的資訊,工作量就會很大,所以我們要簡化這些資訊。如何簡化呢?

要儲存一年的資訊,其實只要兩個資訊就可以了:(1)農曆每個月的大小;(2)今年是否有閏月,閏幾月以及閏月的大小。用一個整數來儲存這些資訊就足夠了。具體的方法是:用一位來表示一個月的大小,大月記為1,小月記為0,這樣就用掉了12位,再用低四位來表示閏月的月份,沒有閏月記為0。比如說,2000年的資訊資料是0x0c960,轉化成二進位制就是1100100101100000,表示的含義是1、2、5、8、10、11月大,其餘月小,低四位為0說明沒有閏月。2001年的農曆資訊資料是0x0d954,其中的4表示該年閏4月,月份大小資訊就是0x0d95,具體的就是1、2、4、5、8、10、12月大,其餘月小。這樣就可以用一個數組來儲存這些資訊。在我的C++類中是用m_lunarInfo這個陣列來儲存這些資訊的。

下面就是公曆轉換成農曆的具體演算法:

(1) 計算所求時間到起始年正月初一的天數。

(2) 從起始年份開始,減去每一月的天數,一直到剩餘天數沒有下一個月多為止。此時,m_lunarInfo的下標到了多少,就是減去了多少年,用起始年份加上這個下標就可以得到農曆年份,然後看減去了幾個月。如果本年不閏月或者閏月還在後面,就可以直接得到農曆月份,如果在閏月月份數後面一個月,則這個月就是閏月。剩餘的天數就是農曆日。(具體實現時有所改進。)

2. 利於泰勒公式巧算星期

在應用數學中有一個計算某一天是星期幾的公式,這就是泰勒公式。公式如下:w = [c÷4] - 2c + y + [y÷4] + [26(m+1)÷10] + d - 1,其中w就是所求日期的星期數。如果求得的數大於(小於)7,就減去(加上)7的倍數,直到餘數小於7為止。式子中c是指公元年份的前兩位數字,y是後兩位數字,m是月數,d是日數。方括弧[]表示對於括號中的數字取整。還有一個特別要注意的地方:所求的月份如果是1月或2月,則應視為上一年的13月或14月,也就是公式中m的取值範圍是從3到14而不是從1到12。

3. 干支紀法

天干有十個,就是甲、乙、丙、丁、戊、己、庚、辛、壬、癸,地支有十二個,依次是子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥。古人把它們按照一定的順序而不重複地搭配起來,從甲子到癸亥共六十對,叫做六十甲子。我國古人用這六十對干支來表示年、月、日、時的序號,周而復始,不斷迴圈,這就是干支紀法。

0甲子

1乙丑

2丙寅

3丁卯

4戊辰

5己已

6庚午

7辛未

8壬申

9癸酉10甲戌

11乙亥

12丙子

13丁丑

14戊寅

15己卯

16庚辰

17辛已

18壬午

19癸未20甲申

21乙酉

22丙戌

23丁亥

24戊子

25己丑

26庚寅

......餘下全文>>

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"))),那就更像農曆表示法了,不過因為農曆每年開始日期都不一樣,所以函式很難達到十分精確的結果,只能是將就著用。

相關問題答案
陽曆農曆怎麼轉換?
陰曆和陽曆怎麼轉換?
公曆農曆怎麼轉換?
陽曆農曆轉換器?
陽曆農曆怎麼區分?
陽曆農曆陰曆怎麼區分?
出生日期陽曆農曆轉換?
陽曆農曆陰曆轉換?
陽曆農曆生日怎麼算?
陽曆農曆轉換公式?