阴阳历转换器-阴历和阳历生日转换器-怎么转换农历生日
农历和公历是怎幺转换的?(怎幺算的?)
你是要口算还是要用笔算?
告诉你,这样子算不靠谱的,根本算不出来,涉及到的转换不是简单的几个公式能得出,相反,它的转换相当复杂。
如果有兴趣编写程序的,我可以提供转换函数库,调用一个函数就可以实现农历与公历的互转了。
目前我已经完美地实现了转换,如果需要,我可以提供。
农历和阳历转换有什幺规律啊?
没有。阳历是以地球围绕太阳公转一周的时间(即: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<>
例: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<>
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<>
--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"))),那就更像农历表示法了,不过因为农历每年开始日期都不一样,所以函数很难达到十分精确的结果,只能是将就着用。