下载此文档

阳历转化成农历法.doc


文档分类:生活休闲 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
该【阳历转化成农历法 】是由【泰山小桥流水】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【阳历转化成农历法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。阳历转化成农历法———————————————————————————————— 作者:———————————————————————————————— 日期:2c++中怎样将阳历转化成农历已关闭20[标签:c++,阳历,农历]小^鱼、2011-05-0311:06推荐答案一、(GregorianCalendar)与农历(ChineseLunarCalendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的。比较常用并且比较简单的公历转换农历算法就是查表方法。首先要保存公历农历的转换信息:以任何一年作为起点,把从这一年起若干年的农历信息保存起来(在我的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的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月。如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月月份数后面一个月,则这个月就是闰月。剩余的天数就是农历日。(具体实现时有所改进。),这就是泰勒公式。公式如下:w=[c ÷4]-2c+y+[y 4]+÷[26(m+1) ÷10]+d-1,其中w就是所求日期的星期数。如果求得的数大于(小于) 7,就减去(加上) 7的倍数,直到余数小于 7为止。式子中 c是指公3元年份的前两位数字,y是后两位数字,m是月数,d是日数。方括弧[]表示对于括号中的数字取整。还有一个特别要注意的地方:所求的月份如果是1月或2月,则应视为上一年的13月或14月,也就是公式中m的取值范围是从3到14而不是从1到12。,就是甲、乙、丙、丁、戊、己、庚、辛、壬、癸,地支有十二个,依次是子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。古人把它们按照一定的顺序而不重复地搭配起来,从甲子到癸亥共六十对,叫做六十甲子。我国古人用这六十对干支来表示年、月、日、时的序号,周而复始,不断循环,这就是干支纪法。0甲子10甲戌20甲申30甲午40甲辰50甲寅1乙丑11乙亥21乙酉31乙未41乙已51乙卯2丙寅12丙子22丙戌32丙申42丙午52丙辰3丁卯13丁丑23丁亥33丁酉43丁未53丁已4戊辰14戊寅24戊子34戊戌44戊申54戊午5己已15己卯25己丑35已亥45己酉55己未6庚午16庚辰26庚寅36庚子46庚戌56庚申7辛未17辛已27辛卯37辛丑47辛亥57辛酉8壬申18壬午28壬辰38壬寅48壬子58壬戌9癸酉19癸未29癸已39癸卯49癸丑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 就得到时间的地支表示(其实是地支的序号)。, 从天文学意义来讲,二十四节气是根据地球绕太阳运行的轨道(黄道) 360度,以春分点为0点,分为二十四等分点,两等分点相隔 15度,每个等分点设有专名,含有气候变化、物候特点、农作物生长情况等意义。二十四节气即立春、雨水、惊蜇、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒。以上依次顺属,逢单的均为"节气",通常简称为"节",逢双的则为"中气",简称为"气",合称为"节气"。现在一般统称4为二十四节气。自古节气的推算是由一年平分 24等分所得的平节气。旧历用平气法推算二十四气,此法将一回归年均分成二十四等分, 从冬至开始等间隔地依次相间安排各个节气及中气, 而各气之间太阳所运行的度数因此并不相等。 新历推算则用定气法, 此法将黄道上的周天度数等分成二十四份,太阳移至某一分点时, 即定为某一节气的日期, 由于太阳的视运动迟速不均,因此各节气间相隔的时间亦不等。但不论新历或 旧历,均取冬至为二十四气之首,故在春、秋分时彼此的差别最大。 为何中国传统历家早知推算定气, 却又****用平气注历?此主要或由于平气易于计算所致, 因在此法之下,各节气与节气间或中气与中气间相隔固定为三十日五时辰又二刻。本C++类中实现二十四节气的计算,使用的是平节气的简单算法。用数组 sTermInfo记录从小寒开始的各个节气相对于小寒所经历的分钟数,并用 intsTerm(inty,intn) 函数得到某年y的第n个节气为所在月的第几日 (n从0小寒起算)。由于没有考虑 岁差与章动,所以精确度不是很高。5

阳历转化成农历法 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
最近更新