農曆與陽曆的轉換?
農曆和陽曆轉換有什麼規律啊?
沒有。陽曆是以地球圍繞太陽公轉一週的時間(即: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即是陰曆二十七日。
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庚寅
......餘下全文>>
農曆轉換成公曆的計算公式?
因為公曆(現在用的是格里曆,以前還曾用儒列歷)和中國農曆都不是嚴格按一個公式計算得到的,所以兩個曆法沒有直接的公式。
試圖用一個簡單的公式,而不利用許多像萬年曆一樣的資料(儘管可以簡化),就達到公農曆轉換的目的,這是不可能的。我們能見到的所有公農曆轉換的軟體,都存有多少不等的一些年份的歷法資料。
這些資料之中,最重要的是農曆的每月天數。因為農曆是陰陽曆,陰曆部分(按月相編的部分)決定月日,陽曆部分(按太陽高度編的部分)就是節氣。節氣基本上是與公曆直接對應的,可以較容易的推算;但月相週期與地球公轉的關係相對複雜,一般都需要天文觀測資料授時,所以農曆每月是大月還是小月沒有簡單的公式。
至於公曆和農曆的置閏,倒都有一定的方式推算,並不困難。
如果只是天文資料,其實都還是可以算的——因為天文週期十分穩定,我們只要嚴格地按天文週期推算就可以了。可是還有更為麻煩的一點,就是公曆和農曆這些曆法,並不是完全嚴格地按照天文上的實際週期進行的,還有許多人為的因素。最著名的就是羅馬皇帝幾次修改2、8等月份長短,以及儒列歷中因計算不準確而人為地去掉了十天等事。中國農曆也有因為古代天文觀測不準確造成的政府頒佈的歷法與天象不吻合的(我們不能苛求古人觀測的精度)。所以這兩部曆法都是與一個時期社會有關的東西,也就沒有一定的規律可循了。
在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......餘下全文>>
電子表格中怎樣將農曆轉換為公曆
1、農曆轉換為公曆,首先需要一個農曆和公曆的對照表
2、假設對照表的格式為:A列為農曆,B列為公曆。
3、此時可以用VLOOKUP函式進行轉換,公式為:=VLO暢KUP(需要轉換的農曆日期,A:B,2,0)
4、特別注意:需要轉換的農曆日期必須與對照表中A列格式一致。
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"))),那就更像農曆表示法了,不過因為農曆每年開始日期都不一樣,所以函式很難達到十分精確的結果,只能是將就著用。
19870915陰曆轉換為陽曆
19870915陰曆轉換為陽曆1987年11月6日星期五
"農曆1987年九月十五日"查詢資訊如下:
公曆:1987年11月6日星期五天蠍座
農曆:兔年 九月 十五日
四柱:丁卯 庚戌 己未 節氣: 生誕: 二十八宿:角 甲子納音:天上火 距今:已過去10506天
在excel中怎樣制公曆和轉換成農曆
這個需要VBA了.
按ALT+F11 再 插入 模組
把下面的程式碼制複製到模組中,然後 在B1中輸入:
=calendar(A1)
假設日期在A1
Option Explicit
Dim WeekName(7), MonthAdd(11), NongliData(120), 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, num1, num2
Dim year, month, day, grid, grid_date
Function calendar(grid)
grid_date = grid
year = Mid(grid_date, 1, 4)
num1 = InStr(grid_date, "-")
num2 = InStr(6, grid_date, "-")
If (num2 - num1) = 3 Then
month = Mid(grid_date, 6, 2)
day = Mid(grid_date, 9, 2)
Else
month = Mid(grid_date, 6, 1)
day = Mid(grid_date, 8, 2)
End If
'星期名
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) = "酉......餘下全文>>