c++中怎样将阳历转化成农历

c++中怎样将阳历转化成农历,第1张

一、 原理篇

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庚寅

27辛卯

28壬辰

29癸已30甲午

31乙未

32丙申

33丁酉

34戊戌

35已亥

36庚子

37辛丑

38壬寅

39癸卯40甲辰

41乙已

42丙午

43丁未

44戊申

45己酉

46庚戌

47辛亥

48壬子

49癸丑50甲寅

51乙卯

52丙辰

53丁已

54戊午

55己未

56庚申

57辛酉

58壬戌

59癸亥得到年、月、日的干支表示原理是相同的,即所求的年、月、日到起始年、月、日所经历的年数、月数、天数,加上起始年、月、日干支表示在上表中的序号,与10取模得到天干的序号,与12取模得到地支的序号。以年为例,1900年立春后为庚子年,查上表可知,庚子年为六十甲子的第36位,所以所求年份m_year到1900年的年数为m_year-1900+36-1(如果月份m_month小于等于2月)或m_year-1900+36(如果月份m_month大于2月)。同理,可以得到月、日的干支表示。最后,还要依据节气(立春)调整二月份的干支纪年;依据每月的第一个节气的日期调整月的干支表示,具体情况源程序中有详细的说明。

古人根据太阳升起的时间, 将一昼夜区分为十二个时辰,用十二地支为代号。如果用m_hour表示公历现在的小时数(二十四表示法),则(m_hour+1)/2就得到时间的地支表示(其实是地支的序号)。

4. 二十四节气

节气就实质而言是属于阳历范畴,从天文学意义来讲,二十四节气是根据地球绕太阳运行的轨道(黄道)360度,以春分点为0点,分为二十四等分点,两等分点相隔15度,每个等分点设有专名,含有气候变化、物候特点、农作物生长情况等意义。二十四节气即立春、雨水、惊蜇、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒。以上依次顺属,逢单的均为"节气",通常简称为"节",逢双的则为"中气",简称为"气",合称为"节气"。现在一般统称为二十四节气。

自古节气的推算是由一年平分24等分所得的平节气。旧历用平气法推算二十四气,此法将一回归年均分成二十四等分,从冬至开始等间隔地依次相间安排各个节气及中气,而各气之间太阳所运行的度数因此并不相等。新历推算则用定气法,此法将黄道上的周天度数等分成二十四份,太阳移至某一分点时,即定为某一节气的日期,由于太阳的视运动迟速不均,因此各节气间相隔的时间亦不等。但不论新历或旧历,均取冬至为二十四气之首,故在春、秋分时彼此的差别最大。为何中国传统历家早知推算定气,却又习用平气注历?此主要或由于平气易于计算所致,因在此法之下,各节气与节气间或中气与中气间相隔固定为三十日五时辰又二刻。

本C++类中实现二十四节气的计算,使用的是平节气的简单算法。用数组sTermInfo记录从小寒开始的各个节气相对于小寒所经历的分钟数,并用int sTerm(int y, int n)函数得到某年y的第n个节气为所在月的第几日(n从0小寒起算)。由于没有考虑岁差与章动,所以精确度不是很高。

提起阳历转农历生日转换器,大家都知道,有人问公历生日和农历生日怎么转换的?另外,还有人想问公历日如何查农历?你知道这是怎么回事?其实阴历日期转阳历日期怎么用公年历查,下面就一起来看看有没有软件可以把农历生日导出为公历,希望能够帮助到大家!

阳历转农历生日转换器

现在历转化的软件很多啊,飞雪桌面类等等,但是你说的可能还不行,但是你自己查询也很快啊,就20年嘛,动手吧!

农历转阳历日期查询

准确的说,农历年2月初6是阳历年3月2日。

公历生日转换成农历生日

没有农历星座哦~~

九一八~汗~~你还是小朋友吧,我问你,九一八事变,在哪年你知道不?

勿忘国耻,好好学习呀!农历公历生日转换器。

你的农历生日:八月初六

想知道农历生日如何转换成公历生日?农历阳历转换日期查询。

算是不会,直接看万年历!85年公历9月2日生日换算成阴历是乙丑年甲申月甲辰日农历7月18日

阴历日期转阳历日期怎么用公年历查

农历85年9月2日换成公历是年10月14日

阳历转农历生日转换器:公历生日和农历生日怎么转换的?

你有QQ号吗?农历和公历怎么换算。

在最新版的中农历公历转换工具。

“我的资料”里

只要你输入个日期(不管是农历还是公历)它都能转换成另一种

说也说不明白,你去试试,就明白了!

转换农历生日为公历

用万年历查询你生日那年农历生日对应的公历日,就是你的公历生日呀。公历农历转换表。

很多人过的是公历生日,我么就两个生日都过,哈哈哈公历生日。

公历的固定生日是没有的。如果你有的农历的生日,根据农历生日那样算的话每年的公历生日都是不一样的。

除非以公历做为生日的人,不管农历的。那样就无所谓了农历生日计算器在线。

阳历转农历生日转换器:公历日如何查农历?

知道公历日查农历日期,可以用手机自带日历查询啊,不过 *** 作步骤比较繁琐,而且查询的日期范围比较小。

也可以考虑网络带有公历转换农历功能程序进行在线查询这样会更方便点,可以使用信达利在线排盘系统,通过公历日期可以查农历日期、干支八字、星座等,查询 *** 作图如下:如何查询自己的阴历生日。

Excel 中阳历日期如何转换成阴历日期?

1、电脑打开Excel表格,列好日期。月份和日期对照表。

2、然后在阴历中输入公式=TEXT(A2,”[$-]yyyy-m-d”)。阳阴生日转换器。

3、输入公式后,按回车键就可以把阳历转换为阴历了。

4、下拉复制公式就可以了。常说的生日历还是阳历。

阳历转农历生日转换器:阴历日期转阳历日期怎么用公年历查

手机下个万年历就可以了、如果喜欢点个好评呗

阴历与阳历的生日转换农历生日查询对照表。

每一年的阴历阳历相对应的日子是不固定的,年四月初四那天的阳历日期是年5月10日。如果你要过阳历生日就看当年的日历在5月10日,不必管那天历的几月初几,如果你要历生日,就按当年的阴历四月初四,也不必理会那天的阳历日期是多少号。公历到农历的计算公式。

今年的阳历5月2日是你四月初四的阴历生日,当然要在那天庆生。但是,那不是17周岁的生日,因为周岁是按阳历的。要过17周岁的生日只能在5月10日。1996年9月30日阳历是多少。

你知道吗?按阴历你已经18岁了。(虚岁)

农历:丁丑年四月初四怎样算农历生日。

公历:年5月10日星期六金牛座

信息来源:华中农历网免费农历生辰八字最详细分析。

以上就是与有没有软件可以把农历生日导出为公历相关内容,是关于公历生日和农历生日怎么转换的?的分享。看完阳历转农历生日转换器后,希望这对大家有所帮助!

提起阴历和阳历生日转换器,大家都知道,有人问必须历转换成阳历,找这么一量转换的工具,另外,还有人想问阴历与阳历的生日转换,你知道这是怎么回事?其实农历新历转换器,下面就一起来看看阳历生日转换阴历生日,希望能够帮助到大家!

阴历和阳历生日转换器

阳历生日是年7月9日星期日,转成阴历是年六月十二,生肖属猪,距离今日已经过去天。

阴历甲午()年六月十二,距离今日还有天。(阳历是年7月8日星期二)查生日阴历阳历对照表。

阳历生日转换阴历生日?如何查询自己的阴历生日。

生日 如何农历转换公历?

出生是年6月23日出生日期查询农历生日。

如果这时间您给的是阳历,那么阴历你就是5月23日是生日。以后无论那一年的阴历5月23日都是你的生日。

有了阴历生日,变换的就是阳历得日子。每一年的日历牌您都可以查出对应的历日子。

以92年6月23日为阴历日子计算,年您的阳历生日是7月25日。以此类推。祝开心,生日快乐!

阴历和阳历生日转换器:必须历转换成阳历,找这么一量转换的工具

单独查询的话,万年历就行。万年历农历公历转换。

找个阳历日期转换为阴历日期程序,加一个循环,我一段程序就行了

找不到高手?让文员查他几个小时就行了

如何在EXCEL中实现生日阳历到阴历的批量转换。

OptionExplicit

DimWeekName(7),MonthAdd(11),NongliData(99),TianGan(9),DiZhi(11),ShuXiang(11),DayName(30),MonName(12)

DimcurTime,curYear,curMonth,curDay,curWeekday阴历和公历的转换器。

DimGongliStr,WeekdayStr,NongliStr,NongliDayStr万年历大全。

Dimi,m,n,k,isEnd,bit,TheDate

Dimyear,month,day,grid,grid_date

Subdatetest()’这是转换样例农历生日计算器。

DebugPrintcalendar(“-8-15”)

EndSub生日查询系统。

Functioncalendar(grid)’转换函数1800~2100年公历农历对照表。

grid_date=grid星座查询农历转换阳历。

year=Mid(grid_date,1,4)阴历四月三十是阳历几月几号。

month=Mid(grid_date,6,1)阳历6月26生日农历是几号。

day=Mid(grid_date,8,2)今天是农历几月几日几号。

‘星期名

WeekName(0)=””

WeekName(1)=”星期日”公历如何换算成农历。

WeekName(2)=”星期一”

WeekName(3)=”星期二”农历3月20生日阳历是多少。

WeekName(4)=”星期三”

WeekName(5)=”星期四”时辰阳历公历不分吗。

WeekName(6)=”星期五”

WeekName(7)=”星期六”

‘天干名称

TianGan(0)=”甲”有没有1900以前的万年历。

TianGan(1)=”乙”

TianGan(2)=”丙”

TianGan(3)=”丁”

TianGan(4)=”戊”

TianGan(5)=”己”生日日期计算器。

TianGan(6)=”庚”阴历阳历公式。

TianGan(7)=”辛”

TianGan(8)=”壬”

TianGan(9)=”癸”农历和新历生日怎么算。

‘地支名称阳历1971年10月28日。

DiZhi(0)=”子”

DiZhi(1)=”丑”农历1999年7月14日生日新历是。

DiZhi(2)=”寅”

DiZhi(3)=”卯”上的生日在日历上怎么看。

DiZhi(4)=”辰”

DiZhi(5)=”巳”

DiZhi(6)=”午”1月18号阳历生日。

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)=”狗”

ShuXiang(11)=”猪”

‘农历日期名

DayName(0)=””

DayName(1)=”初一”

DayName(2)=”初二”

DayName(3)=”初三”

DayName(4)=”初四”

DayName(5)=”初五”

DayName(6)=”初六”

DayName(7)=”初七”

DayName(8)=”初八”

DayName(9)=”初8221;

DayName(10)=”初8221;

DayName(11)=”十一”

DayName(12)=”十二”

DayName(13)=”十三”

DayName(14)=”十四”

DayName(15)=”十五”

DayName(16)=”十六”

DayName(17)=”十七”

DayName(18)=”十八”

DayName(19)=”十8221;

DayName(20)=”二8221;

DayName(21)=”二十一”

DayName(22)=”二十二”

DayName(23)=”二十三”

DayName(24)=”二十四”

DayName(25)=”二十五”

DayName(26)=”二十六”

DayName(27)=”二十七”

DayName(28)=”二十八”

DayName(29)=”二十8221;

DayName(30)=”三8221;

‘农历月份名

MonName(0)=””

MonName(1)=”正”

MonName(2)=”二”

MonName(3)=”三”

MonName(4)=”四”

MonName(5)=”五”

MonName(6)=”六”

MonName(7)=”七”

MonName(8)=”八”

MonName(9)=”8221;

MonName(10)=”8221;

MonName(11)=”十一”

MonName(12)=”腊”

‘公历每月前面的天数

MonthAdd(0)=0

MonthAdd(1)=31

MonthAdd(2)=59

MonthAdd(3)=90

MonthAdd(4)=

MonthAdd(5)=

农历新历转换器

MonthAdd(6)=

MonthAdd(7)=

MonthAdd(8)=

MonthAdd(9)=

MonthAdd(10)=

MonthAdd(11)=

‘农历数据

NongliData(0)=

NongliData(1)=

NongliData(2)=

NongliData(3)=

NongliData(4)=

NongliData(5)=

NongliData(6)=

NongliData(7)=

NongliData(8)=

NongliData(9)=

NongliData(10)=

NongliData(11)=

NongliData(12)=

NongliData(13)=

NongliData(14)=

NongliData(15)=

NongliData(16)=

NongliData(17)=

NongliData(18)=

NongliData(19)=

NongliData(20)=

NongliData(21)=

NongliData(22)=

NongliData(23)=

NongliData(24)=

NongliData(25)=

NongliData(26)=

NongliData(27)=

NongliData(28)=

NongliData(29)=

NongliData(30)=

NongliData(31)=

NongliData(32)=

NongliData(33)=

NongliData(34)=

NongliData(35)=

NongliData(36)=

NongliData(37)=

NongliData(38)=

NongliData(39)=

NongliData(40)=

NongliData(41)=

NongliData(42)=

NongliData(43)=

NongliData(44)=

NongliData(45)=

NongliData(46)=

NongliData(47)=46

NongliData(48)=

NongliData(49)=

NongliData(50)=

NongliData(51)=

NongliData(52)=

NongliData(53)=

NongliData(54)=

NongliData(55)=

NongliData(56)=

NongliData(57)=

NongliData(58)=

NongliData(59)=

NongliData(60)=

NongliData(61)=

NongliData(62)=

NongliData(63)=

NongliData(64)=

NongliData(65)=

NongliData(66)=

NongliData(67)=

NongliData(68)=

NongliData(69)=

NongliData(70)=

NongliData(71)=

NongliData(72)=

NongliData(73)=

NongliData(74)=

NongliData(75)=

NongliData(76)=

NongliData(77)=

NongliData(78)=

NongliData(79)=

NongliData(80)=

NongliData(81)=

NongliData(82)=

NongliData(83)=

NongliData(84)=

NongliData(85)=

NongliData(86)=

NongliData(87)=

NongliData(88)=

NongliData(89)=

NongliData(90)=

NongliData(91)=

NongliData(92)=

NongliData(93)=

NongliData(94)=

NongliData(95)=

NongliData(96)=

NongliData(97)=

NongliData(98)=

NongliData(99)=

‘生成当前公历年、月、日==>GongliStr

curYear=year

curMonth=month

curDay=day

GongliStr=curYear&”年”

If(curMonth<10)Then

GongliStr=GongliStr&”0″&curMonth&”月”

Else

GongliStr=GongliStr&curMonth&”月”

EndIf

If(curDay<10)Then

GongliStr=GongliStr&”0″&curDay&”日”

Else

GongliStr=GongliStr&curDay&”日”

EndIf

‘生成当前公历星期==>WeekdayStr

curWeekday=Weekday(curTime)

WeekdayStr=WeekName(curWeekday)

‘计算到初始时间年2月8日的天数:-2-8(正月初一)

TheDate=(curYear-)+Int((curYear-)/4)+curDay+MonthAdd(curMonth-1)-38

If((curYearMod4)=0AndcurMonth>2)Then

TheDate=TheDate+1

EndIf

‘计算农历天干、地支、月、日

isEnd=0

m=0If(NongliData(m)<)Then

k=11

Else

k=12

EndIf

n=kIf(n<0)Then

ExitDo

EndIf

‘获取NongliData(m)的第n个二进制位的值

bit=NongliData(m)

Fori=1TonStep1

bit=Int(bit/2)

Next

bit=bitMod2

If(TheDate<=29+bit)Then

isEnd=1

ExitDo

EndIf

TheDate=TheDate-29-bit

n=n-1

Loop

If(isEnd=1)Then

ExitDo

EndIf

m=m+1

Loop

curYear=+m

curMonth=k-n+1

curDay=TheDate

If(k=12)Then

If(curMonth=(Int(NongliData(m)/)+1))Then

curMonth=1-curMonth

ElseIf(curMonth>(Int(NongliData(m)/)+1))Then

curMonth=curMonth-1

EndIf

EndIf

‘生成农历天干、地支、属相==>NongliStr

NongliStr=”农历”&TianGan(((curYear-4)))&DiZhi(((curYear-4)))&”年”

NongliStr=NongliStr&”(“&ShuXiang(((curYear-4)))&””

‘生成农历月、日==>NongliDayStr

If(curMonth<1)Then

NongliDayStr=”闰”&MonName(-1curMonth)

Else

NongliDayStr=MonName(curMonth)

EndIf

NongliDayStr=NongliDayStr&”月”

NongliDayStr=NongliDayStr&DayName(curDay)

calendar=NongliStr&NongliDayStr&”)”

EndFunction

以上就是与阳历生日转换阴历生日相关内容,是关于必须历转换成阳历,找这么一量转换的工具的分享。看完阴历和阳历生日转换器后,希望这对大家有所帮助!

以上就是关于c++中怎样将阳历转化成农历全部的内容,包括:c++中怎样将阳历转化成农历、阳历转农历生日转换器,有没有软件可以把农历生日导出为公历、阴历和阳历生日转换器,阳历生日转换阴历生日等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10176705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存