中国日历(公历+农历)算法
阴历阳历转换计算公式

1、阳历日期推算阴历日期的方法:前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。
如要知道1984年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+31+7)-29.5n =204.2- 29.5n 然后用29.5去除204.2得商数6......27.2,6即是n 值,余数27即是阴历二十七日2.公历换算为农历二十四节气在黄道上的位置是固定的,但各年有平年和闰年之分,就使得回归年天数与实际天数不等,每年在日历上可差一天。
这样可以将阴历经过任意整回归年在现在的日历上查到阳历(阳历一年相当阴历的月数为365.2422/29.530588=12.36827个月)。
例如,可先在1995年的日历上查得与(该年)阴历对应的阳历日期,这样就找到了临时落脚点,也就是找到了阴阳互换的关键。
例如,可先以阴历四月初一(日)为引数,在1995年日历上查到对应的阳历为4月30日。
由于已经计算出经过的月数,由于已经计算出经过的月数,将经过的月数的尾数将经过的月数的尾数将经过的月数的尾数(小数)(小数)化为日,加在4月30日上,就得到经过(1995-1070)整年数的阳历日期,也就是起始阴历日期对应的阳历日期,历日期对应的阳历日期,即得到了待查的日期为即得到了待查的日期为4月30日加上0.64957×29.530588得到(1070年)5月19.1821840日。
这样就得到了所给例子的阴阳历日期换算结果……”。
【公历年份换算农历干支纪年口诀】(含公元前后两种换算方法公式)简单、实用、易学、好记

【公历年份换算农历干支纪年口诀】(含公元前后两种换算方法公式)简单、实用、易学、好记【公历年份换算农历干支纪年口诀】干支纪年法是中国历法上自古以来就一直使用的纪年方法,采用的是阴阳合历。
干支是天干和地支的总称。
把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的“干支表”。
干支纪年以每年春节换年。
而在历史教学中记录一些事件的发生时间都是采用公元纪年,公元纪年和干支纪年有一个简单的换算口诀如下:一,用数字对应天干地支:自然数: 1 2 3 4 5 6 7 8 9 0天干:甲乙丙丁戊己庚辛壬癸自然数: 1 2 3 4 5 6 7 8 9 10 11 0地支:子丑寅卯辰巳午未申酉戌亥二,举例(以2018为例):公元年数减去3——2018-3=201510除余數是天干——2015÷10=201……5(戊)该数再用12除——2015÷12=167……11(戌)余数就把地支显所以2018年按干支纪年就是戊戌年。
以上是公历公元年份换算成农历干支纪年的计算方法。
下面姜毅同志研究发现了另一段年份的换算方法,即:公历公元前年份换算成农历干支纪年的计算方法:一,用數字對應天干地支:0 9 8 7 6 5 4 3 2 1天干:甲乙丙丁戊己庚辛壬癸0 1110 9 8 7 6 5 4 3 2 1地支:子丑寅卯辰巳午未申酉戍亥二,口訣並舉例(以公元前57年為例):公元前年數加3:57+3=601.60除10的余數是天干:60÷10=6……0(0对应的天干是甲);还有一种更简单明了的方法,就是年数加3后的和不用作除10计算,直接用和的个位数与天干对应即可。
2.60除12的余数是地支:60÷12=5……0(0对应的地支是子)余数就把地支显所以公元前57年换算成农历干支纪年就是甲子年。
又如:将公元前1250年换算成干支年:1250+3=1253① 和的个位3对应的天干为辛②1253÷12=104 (5)余数5对应的地支为未故公元前1250年为辛未年。
最新最准公历和农历转换算法详解

最新最准公历和农历转换算法详解公历(阳历)和农历(阴历)是中国传统的两种历法,公历采用太阳历,以地球绕太阳运行为基础,而农历是以月球运行为基础。
公历更准确地反映了太阳运行的变化,而农历则更加贴近农业生产和民俗习俗的需求。
公历和农历之间的转换涉及到一个重要的问题,即如何确定其中一年是闰年还是平年,以及每个月有多少天。
因为农历中的月份天数不规则,而公历中的月份天数相对固定。
最准确的公历和农历转换算法是以历法的数学及历史研究为基础的,它考虑了太阳和月球的运行轨迹,以及历法制订时的政治和文化背景等方面,下面详细介绍这个算法。
1.公历转农历:公历转农历的核心问题是确定其中一年闰月的位置和天数。
一般而言,公历转农历的过程如下:(1)确定公历年份。
(2)根据公历年份的规则,计算闰年的次数。
公历规定,4年一闰,100年不闰,400年又要闰。
因此,可以通过一系列的除法和取余运算,判断其中一年是否是闰年。
(3)确定农历年份。
根据闰年的次数,可以推算其中一年距离公元前一年农历年份的偏移量。
再加上历史上确定的一个公历对应农历年份的偏移量,即可确定农历年份。
(4)确定农历月份。
根据农历月份的规则,即按照一定的数学计算公式,可以确定其中一年的闰月位置。
具体的算法很复杂,涉及到太阳、月球的轨迹计算,需要使用较为复杂的数学运算方法,如三角函数等。
(5)确定农历日期。
在确定了农历月份的基础上,根据农历每个月的天数规则,可以确定其中一天的农历日期。
2.农历转公历:农历转公历也面临着确定闰年的问题。
农历转公历的过程如下:(1)确定农历年份和月份。
根据农历日期,确定农历当前年份和月份。
(2)根据农历年份的规则,计算闰年的次数。
农历中的闰年规则和公历中的规则略有不同,需要根据历史数据和规则进行计算。
(3)确定公历年份。
根据农历年份和闰年的次数,可以推算其中一年距离公元前一年公历年份的偏移量。
再加上历史上确定的一个农历对应公历年份的偏移量,即可确定公历年份。
公历农历年月日计算公式

公历农历年月日计算公式公历农历年月日计算公式是许多人在处理日期问题时需要的基本知识。
公历是我们常用的日期计数方式,而中国的传统农历则是历史悠久的时间计算方式之一。
这两种计算方式存在着不小的差异,如何将它们互相转换呢?下面我们就来了解一下公历农历年月日计算公式。
1.公历转农历公历转农历的计算公式是非常复杂的,一般需要借助农历日历手动查看或使用一些专业的工具软件。
但如果你只是需要大概地了解某公历日期对应的农历年月日,也可以使用简化的计算方法,具体如下:(1)首先需要知道该公历年份的春节日期(阳历除夕),例如2022年春节是在2月1日,2023年春节是在1月22日。
(2)计算该公历日期到春节的天数差,并加上春节日期对应的农历月初一的天数即可,例如2022年5月1日对应的是3月初五(2月1日到5月1日相差90天,3月初一对应阳历2月1日,5月1日再加上4个月,故为3月初五)。
2.农历转公历农历转公历的计算公式较为繁琐,但一般应用较少,在这里只简单介绍一下基本的计算方法:(1)首先需要知道该农历年份的春节日期(阳历除夕),例如2022年春节是在2月1日,2023年春节是在1月22日。
(2)计算该农历日期到春节的天数差,并加上春节日期即可。
以2022年农历10月初一为例,该天距离2022年春节相差219天,而春节日期为阳历2月1日,因此10月初一阳历日期为3月11日。
总结:公历农历年月日计算公式对我们处理日期问题是非常实用的,掌握了这个方法,就可以快速地将公历日期转化为农历日期,或者将农历日期转化为公历日期。
但由于涉及到一些数学公式和历法术语,初学者可能需要一些时间来逐步学习和掌握。
对于日常应用,我们也可以使用一些专业的软件或者查询工具来快速地帮助我们完成日期转换的操作。
农历换算公式大全

农历换算公式大全据史书记载,中国的农历历法始于夏朝,晚至汉代已成熟,一直沿用至今。
虽然很多地方也采用了公历,但农历仍然是中国人最常用的历法。
因此,农历换算公式是有必要熟知和掌握的。
一、换算公式1.求节气。
农历每个月第15天节气叫小寒,再经过15天则为大寒。
假设月初的首日节气为X,则农历每月的节气序号为:X,X+15,X+30,X+45,X+60等。
2.求月份。
假设今天是一年中第x月y日(农历),其上一月的末日是x-1月29日,y>29,则今天是x月30日。
y=29,则今天是y 月的最后一天。
3.求年份。
农历每年的第一天是正月初一,经过12个月,第13个月是下一年的正月初一,则这一年的结束日期是当年13月29日或30日,以此推算。
二、换算表对于农历换算公式,人们也制作了如下换算表,以便查询农历日期:|历月份 |月 | 二月 | 三月 |月 | 五月 |月 | 七月 |月 |九月 |月 |一月 |二月 || :------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :------: | :------: || 数 | 29 | 30 | 29 | 30 | 29 | 30 | 29| 30 | 29 | 30 | 29/30 | 29/30 |三、应用1.农历习俗。
农历换算公式可用于节日查询,如春节、端午节、中秋节、重阳节等,这些节日的某些习俗可以按时进行。
2.农历计算。
由于农历一年的月份是不等的,有的月份只有29天,有的月份有30天,因此,农历换算公式可以用来确定农历日期与公历日期之间的对应关系。
3.农历文字查询。
通过农历换算公式,可以精准查询农历文字及其含义,例如:正月初一可称为“春节”,六月初五可称为“端午节”等。
农历换算公式不仅仅是用于节日查询,它还是中国古代历法的重要组成部分,是中国传统文化与社会生活的重要组成部分。
阴历阳历转换计算公式

阴历阳历转换计算公式
1.阴历阳历的转换不同
阴历和阳历是两种不同的日历,其中阴历是按照太阳和月亮的运行轨迹,按照太阳来计算日期的日历,而阳历是按照地球绕太阳公转一周来计
算日期的日历,因此两者的转换要求也有所不同。
2.基本原理
阴历日期的转换要求基于以下原理:以中国唐朝为基准,一年共有
354/355天,每2~3年有1年闰,即365天,农历每年分12个月,有大
小月之分,每个月又按30、29两种不同的天数计算,其中大月30天,小
月29天,定朔月以节令月为基准(每4年更换节令月),每个月节令月
称为“正月”。
阳历日期的转换要求基于以下原理:一年有365天,闰年有366天,
每月有28天到31天,共12个月,而每个月的天数是固定的,故可以按
照这个原理进行转换。
3.转换公式
由于阴历和阳历日期的计算方式有所不同,所以转换公式也有所不同。
阴历转换为阳历时,公式如下:
N=(N+2)/3
其中,N=农历月,若N不满三位数,则用0补齐;如N=5,则N=005;
将结果作为农历的节令月,即可求得是阳历哪一月;
同时,节令月的1号即是阳历日期;
反之,阳历转换为阴历时,公式如下:
N=(N-1)*3+2
由于农历每个月只有29或者30天,即农历的节令月只有29号或者30号。
公历换算农历方法

公历换算农历方法
公历与农历是两种不同的历法,公历以太阳年作为基准,而农历则以月亮周期为依据。
换算公历和农历的方法相对简单,可以按照以下步骤进行:
1. 首先,确定需要换算的年份和月份。
2. 求出该年年初到当月之间的天数总和。
例如,假设需要换算的是2022年2月,那么该年年初到2月底有几天呢?可以通
过查看公历的日历或者使用计算工具来得到答案。
3. 计算出农历年份的年份,这一步需要根据农历年历表进行查询。
农历年份有一个十二年一个周期的循环,每个周期中的年份对应着十二生肖。
例如,2022年是中国农历中的“壬寅年”。
4. 利用农历年份的信息,可以根据农历年历表查找当年的正月初一对应的公历日期。
以正月初一为基准,加上经过的天数,就可以得到换算后的公历日期。
例如,假设2022年农历正月
初一对应的公历日期是2月1日,再加上2月份的天数,就可
以得到农历2月的公历换算结果。
需要注意的是,农历每个月的长度是不固定的,有的月份为
29天,有的月份为30天。
因此,在换算时要特别留意每个月
的天数差异。
此外,还需要注意润月的情况,有时候会出现闰月,润月会导致农历多出一个月,所以在换算时要特别注意闰月的情况。
农历生日和公历生日怎么换算

农历生日和公历生日怎么换算一、引言在中国,许多人在同时庆祝农历生日和公历生日。
农历生日和公历生日的换算方法让人们可以在日历上找到正确的日期,值得注意的是,两种日期的换算方法略有不同。
本文将介绍如何准确地将农历生日和公历生日进行互相转换。
二、农历生日和公历生日的基本概念1. 农历生日农历生日是根据农历的日期来确定的,通常使用农历日期的年月日表示。
较多土著族群仍以陰阳曆或传统方法調整农历日期,大多数华人社区使用農曆。
农历生日通常在传统节日(如春节)或本人出生日期庆祝。
2. 公历生日公历生日是根据一年中的365(或366)天来计算的日期,通常使用公历的年月日表示。
大多数国际社群使用公曆。
公历生日是现代社会中通用的,人们在每年的同一日期庆祝生日。
三、农历生日和公历生日的换算方法1. 公历转农历要将公历生日转换为农历生日,可通过以下步骤进行计算:•找到对应公历日期的农历年。
较广泛使用的方式是使用农历年表来进行查找,也可使用在线农历转换工具。
•根据公历出生日期在该农历年中的位置来确认农历月和日。
一般来说,计算机工具和互联网服务会提供准确的农历日期。
2. 农历转公历要将农历生日转换为公历生日,可通过以下步骤进行计算:•找到对应农历日期的公历年。
同样可使用农历年表或在线转换工具来进行查询。
•确认该农历日期在公历年中的正确位置,确定公历的月和日。
互联网工具通常会提供准确的公历日期。
四、换算示例下面举例说明一些农历和公历的转换:农历生日转公历生日假设农历生日为农历二月初五:•查遍相关年份,确认农历二月初五对应的公历日期为3月23日。
公历生日转农历生日假设公历生日为7月15日:•查询相关年份,确认7月15日对应的农历日期为六月十五。
五、总结通过以上介绍,我们可以看到,农历生日和公历生日之间的转换并不复杂,只要掌握相关的换算方法即可。
大多数人们选择在公历生日和农历生日都庆祝,以尊重传统和文化。
希望这篇文档能帮助你更好地理解农历生日和公历生日的换算方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国公历算法中国公历算法不是太难,关键是星期值的确定。
这里给出了简单算法:public static int dayOfWeek(int y, int m, int d) {int w = 1; // 公历一年一月一日是星期一,所以起始值为星期日y = (y-1)%400 + 1; // 公历星期值分部 400 年循环一次int ly = (y-1)/4; // 闰年次数ly = ly - (y-1)/100;ly = ly + (y-1)/400;int ry = y - 1 - ly; // 常年次数w = w + ry; // 常年星期值增一w = w + 2*ly; // 闰年星期值增二w = w + dayOfYear(y,m,d);w = (w-1)%7 + 1;return w;}中国农历算法根公历相比,中国农历的算法相当复杂。
我在网上找的算法之中, 的算法是最好的一个。
这个算法使用了大量的数据来确定农历月份和节气的分部,它仅实用于公历 1901 年到 2100 年之间的 200 年。
中国农历计算程式跟据 提供的算法,我写了下面这个程式:[HTML]/*** ChineseCalendarGB.java* Copyright (c) 1997-2002 by Dr. Herong Yang./* 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年*/import java.text.*;import java.util.*;class ChineseCalendarGB {private int gregorianYear;private int gregorianMonth;private int gregorianDate;private boolean isGregorianLeap;private int dayOfYear;private int dayOfWeek; // 周日一星期的第一天private int chineseYear;private int chineseMonth; // 负数表示闰月private int chineseDate;private int sectionalTerm;private int principleTerm;private static char[] daysInGregorianMonth ={31,28,31,30,31,30,31,31,30,31,30,31};private static String[] stemNames ={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};private static String[] branchNames ={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};private static String[] animalNames ={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};public static void main(String[] arg) {ChineseCalendarGB c = new ChineseCalendarGB();String cmd = "day";int y = 1901;int m = 1;int d = 1;if (arg.length>0) cmd = arg[0];if (arg.length>1) y = Integer.parseInt(arg[1]);if (arg.length>2) m = Integer.parseInt(arg);if (arg.length>3) d = Integer.parseInt(arg);c.setGregorian(y,m,d);puteChineseFields();puteSolarTerms();if (cmd.equalsIgnoreCase("year")) {String[] t = c.getYearTable();for (int i=0; i< FONT>} else if (cmd.equalsIgnoreCase("month")) {String[] t = c.getMonthTable();for (int i=0; i< FONT>} else {System.out.println(c.toString());}}public ChineseCalendarGB() {setGregorian(1901,1,1);}public void setGregorian(int y, int m, int d) {gregorianYear = y;gregorianMonth = m;gregorianDate = d;isGregorianLeap = isGregorianLeapYear(y);dayOfYear = dayOfYear(y,m,d);dayOfWeek = dayOfWeek(y,m,d);chineseYear = 0;chineseMonth = 0;chineseDate = 0;sectionalTerm = 0;principleTerm = 0;}public static boolean isGregorianLeapYear(int year) { boolean isLeap = false;if (year%4==0) isLeap = true;if (year%100==0) isLeap = false;if (year%400==0) isLeap = true;return isLeap;}public static int daysInGregorianMonth(int y, int m) {int d = daysInGregorianMonth[m-1];if (m==2 && isGregorianLeapYear(y)) d++; // 公历闰年二月多一天return d;}public static int dayOfYear(int y, int m, int d) {int c = 0;for (int i=1; i<>c = c + daysInGregorianMonth(y,i);}c = c + d;return c;}public static int dayOfWeek(int y, int m, int d) {int w = 1; // 公历一年一月一日是星期一,所以起始值为星期日y = (y-1)%400 + 1; // 公历星期值分部 400 年循环一次int ly = (y-1)/4; // 闰年次数ly = ly - (y-1)/100;ly = ly + (y-1)/400;int ry = y - 1 - ly; // 常年次数w = w + ry; // 常年星期值增一w = w + 2*ly; // 闰年星期值增二w = w + dayOfYear(y,m,d);w = (w-1)%7 + 1;return w;}private static char[] chineseMonths = {// 农历月份大小压缩表,两个字节表示一年。
两个字节共十六个二进制位数,// 前四个位数表示闰月月份,后十二个位数表示十二个农历月份的大小。
0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05, 0x59,0x45,0x95,0x0a,0xa6,0x04,0x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04, 0xb4,0x05,0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x56,0x02,0x6d,0x71, 0x6d,0x01,0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09, 0x56,0x01,0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56, 0xa5,0x04,0x2b,0x09,0x9e,0x38,0xb6,0x08,0xec,0x74,0x6c,0x05,0xd4,0x0a, 0xe4,0x6a,0x52,0x05,0x95,0x0a,0x5a,0x42,0x5b,0x04,0xb6,0x04,0xb4,0x22, 0x6a,0x05,0x52,0x75,0xc9,0x0a,0x52,0x05,0x35,0x55,0x4d,0x0a,0x5a,0x02, 0x5d,0x31,0xb5,0x02,0x6a,0x8a,0x68,0x05,0xa9,0x0a,0x8a,0x6a,0x2a,0x05, 0x2d,0x09,0xaa,0x48,0x5a,0x01,0xb5,0x09,0xb0,0x39,0x64,0x05,0x25,0x75, 0x95,0x0a,0x96,0x04,0x4d,0x54,0xad,0x04,0xda,0x04,0xd4,0x44,0xb4,0x05, 0x54,0x85,0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x02,0x6a,0x41, 0xda,0x02,0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01, 0xad,0x50,0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c, 0x2a,0x09,0x96,0x54,0xb6,0x08,0x6c,0x09,0x64,0x45,0xd4,0x0a,0xa4,0x05, 0x51,0x25,0x95,0x0a,0x2a,0x72,0x5b,0x04,0xb6,0x04,0xac,0x52,0x6a,0x05, 0xd2,0x0a,0xa2,0x4a,0x4a,0x05,0x55,0x94,0x2d,0x0a,0x5a,0x02,0x75,0x61, 0xb5,0x02,0x6a,0x03,0x61,0x45,0xa9,0x0a,0x4a,0x05,0x25,0x25,0x2d,0x09, 0x9a,0x68,0xda,0x08,0xb4,0x09,0xa8,0x59,0x54,0x03,0xa5,0x0a,0x91,0x3a, 0x96,0x04,0xad,0xb0,0xad,0x04,0xda,0x04,0xf4,0x62,0xb4,0x05,0x54,0x0b, 0x44,0x5d,0x52,0x0a,0x95,0x04,0x55,0x22,0x6d,0x02,0x5a,0x71,0xda,0x02, 0xaa,0x05,0xb2,0x55,0x49,0x0b,0x4a,0x0a,0x2d,0x39,0x36,0x01,0x6d,0x80, 0x6d,0x01,0xd9,0x02,0xe9,0x6a,0xa8,0x05,0x29,0x0b,0x9a,0x4c,0xaa,0x08, 0xb6,0x08,0xb4,0x38,0x6c,0x09,0x54,0x75,0xd4,0x0a,0xa4,0x05,0x45,0x55, 0x95,0x0a,0x9a,0x04,0x55,0x44,0xb5,0x04,0x6a,0x82,0x6a,0x05,0xd2,0x0a, 0x92,0x6a,0x4a,0x05,0x55,0x0a,0x2a,0x4a,0x5a,0x02,0xb5,0x02,0xb2,0x31, 0x69,0x03,0x31,0x73,0xa9,0x0a,0x4a,0x05,0x2d,0x55,0x2d,0x09,0x5a,0x01, 0xd5,0x48,0xb4,0x09,0x68,0x89,0x54,0x0b,0xa4,0x0a,0xa5,0x6a,0x95,0x04, 0xad,0x08,0x6a,0x44,0xda,0x04,0x74,0x05,0xb0,0x25,0x54,0x03};// 初始日,公历农历对应日期:// 公历 1901 年 1 月 1 日,对应农历 4598 年 11 月 11 日private static int baseYear = 1901;private static int baseMonth = 1;private static int baseDate = 1;private static int baseIndex = 0;private static int baseChineseYear = 4598-1;private static int baseChineseMonth = 11;private static int baseChineseDate = 11;public int computeChineseFields() {if (gregorianYear<1901 || gregorianYear>2100) return 1; int startYear = baseYear;int startMonth = baseMonth;int startDate = baseDate;chineseYear = baseChineseYear;chineseMonth = baseChineseMonth;chineseDate = baseChineseDate;// 第二个对应日,用以提高计算效率// 公历 2000 年 1 月 1 日,对应农历 4697 年 11 月 25 日 if (gregorianYear >= 2000) {startYear = baseYear + 99;startMonth = 1;startDate = 1;chineseYear = baseChineseYear + 99;chineseMonth = 11;chineseDate = 25;}int daysDiff = 0;for (int i=startYear; i<>daysDiff += 365;if (isGregorianLeapYear(i)) daysDiff += 1; // leap year }for (int i=startMonth; i<>daysDiff += daysInGregorianMonth(gregorianYear,i);}daysDiff += gregorianDate - startDate;chineseDate += daysDiff;int lastDate = daysInChineseMonth(chineseYear, chineseMonth); int nextMonth = nextChineseMonth(chineseYear, chineseMonth); while (chineseDate>lastDate) {if (Math.abs(nextMonth)<>chineseMonth = nextMonth;chineseDate -= lastDate;lastDate = daysInChineseMonth(chineseYear, chineseMonth); nextMonth = nextChineseMonth(chineseYear, chineseMonth); }return 0;}private static int[] bigLeapMonthYears = {// 大闰月的闰年年份6, 14, 19, 25, 33, 36, 38, 41, 44, 52,55, 79,117,136,147,150,155,158,185,193};public static int daysInChineseMonth(int y, int m) {农历日期的算法cs99619 | 2010年10月25日 | 精品收藏 | 评论:(0) | 浏览:(47)转发至新浪微博转发至腾讯微博转帖到开心网转帖到人人网当前位置:笨朱先行» 精品收藏» 农历日期的算法阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。