以下文字资料是由(太原热线www.0351net.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
万年历公历阴历计算
你这是要写程序还是仅仅为了转换一个日期?写程序的话,简单地,用一个对照表,就可以实现公历转农历,农历转公历的计算了。
比如,用以下的算法压缩出来的数据,通过逆向计算,可以还原出这些数据,再通过这些数据来计算公历和农历,非常方便。
农历月份信息。一年用3个字节表示
+-------------------------------------------------------------------------+
| 第23位 | 第22-17位 | 第16-13位 | 第12-0位 |
|--------+------------------------+------------+--------------------------|
| 保留 | 农历正月初一的年内序数 | 闰月 | 一个比特对应一个月份大小 |
+-------------------------------------------------------------------------+
月份大小数据是月份小的在低位,月份大的在高位,即正月在最低位。
以1900年为例,3个字节的数据展开成二进制位:
0 011110 1000 1 0 1 1 0 1 1 0 1 0 0 1 0
保留 1月31日(春节) 闰八月 从左往右依次十二月,十一月……闰八月、八月、七月……正月的天数
农历月份对应的位为0,表示这个月为29天(小月),为1表示有30天(大月)。
以上算法附带C/C++源代码都在链接:pan.baidu/s/1qY9ysBM 密码:zu7m
这算法效果还是非常不错的,如果觉得还是不够的,我这里还有Excel插件,以及一个C++版本的库,查询更方便。
万年历19570615转换农历
这个简单,我翻了一下人生日历,是农历的1957年五月十八号,星期六,请采纳。万年历的c语言程序代码包括节假日农历,农历转公历,公历农历查询某
/* 多格式万年历 1.问题 设计程序实现多规格打印万年历,要求每一横排打印x个月 整数x可取1,2,3,4,6五个选项 2.设计思路 设置两个数组:一维m数组存放月份的天数,如m(8)=31,即8月份为31天 二维d数组存放日号,如d(3,24)=11,即3月份第2个星期的星期4为11号 其中24分解为十位数字2与个位数字4,巧妙地利用二维数组存放了三维信息 输入年号y,m数组数据通过赋值完成。根据历法规定,平年二月份为28天; 若年号能被4整除且不被100整除,或能被400整除,该年为闰年,二月份为29天 则必须把m(2)改为29. 同时,根据历法,设y年元旦是星期w(取值0-6,0为星期日),整数w的计算公式为 w={y+[(y-1)/4]-[(y-1)/100]+[(y-1)/400]}%7 []为取整。 元旦以后 ,每增加一天,w增1,当w=7时改为w=0即可。 设置三重循环i、j、k为d数组的d(i,j*10+k)赋值。i:1-12,表示月份号;j:1-60 表示每个月约定最多6个星期;k;0-6,表示星期k。从元旦的a=1开始,每赋一个元素, a增1,同时w=k+1。当w=7时,w=0(为星期日)。当a>m(i)时,终止第i月的赋值操作。 输入格式参数x(1,2,3,4,6),设置4重循环控制规格打印: n循环,n:1-12/x,控制打印12/x段(每一段x个月)。、 j循环,j:1-6,控制打印每月的6个星期(6行)。 i循环,i:t--t+x-1,控制打印每行x个月(从第t个月至t+x-1月,t=x(n-1)+1). k循环,k:0-6,控制打印每个星期的7天。 */ #include #include void main() { int a,i,j,n,k,t,w,x,y,z; static int d[13][78]; int m[14]={0,31,28,31,30,31,30,31,31,30,31,30,31}; char wst[]=Sun Mon Tue Wed Thu Fri Sat; puts(Please enter the year: ); scanf(%d,&y); if(y%4==0&&y%100!=0||y%400==0)闰年的二月为29天 m[2]=29; w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;计算y年元旦为星期w for(i=1;im[i]) break; } if(a>m[i]) break; } } puts......余下全文>>万年历公历农历查询
可以相互切换的农历转换成公历的计算公式?
因为公历(现在用的是格里历,以前还曾用儒列历)和中国农历都不是严格按一个公式计算得到的,所以两个历法没有直接的公式。试图用一个简单的公式,而不利用许多像万年历一样的数据(尽管可以简化),就达到公农历转换的目的,这是不可能的。我们能见到的所有公农历转换的软件,都存有多少不等的一些年份的历法数据。
这些数据之中,最重要的是农历的每月天数。因为农历是阴阳历,阴历部分(按月相编的部分)决定月日,阳历部分(按太阳高度编的部分)就是节气。节气基本上是与公历直接对应的,可以较容易的推算;但月相周期与地球公转的关系相对复杂,一般都需要天文观测数据授时,所以农历每月是大月还是小月没有简单的公式。
至于公历和农历的置闰,倒都有一定的方式推算,并不困难。
如果只是天文数据,其实都还是可以算的――因为天文周期十分稳定,我们只要严格地按天文周期推算就可以了。可是还有更为麻烦的一点,就是公历和农历这些历法,并不是完全严格地按照天文上的实际周期进行的,还有许多人为的因素。最著名的就是罗马皇帝几次修改2、8等月份长短,以及儒列历中因计算不准确而人为地去掉了十天等事。中国农历也有因为古代天文观测不准确造成的 *** 颁布的历法与天象不吻合的(我们不能苛求古人观测的精度)。所以这两部历法都是与一个时期社会有关的东西,也就没有一定的规律可循了。
农历日期和公历日期怎么转换,
我做计算器的,这个就是转化,你看哈嘛!将日期换算为公历的天数
private int toJulian(){
int jy=year;
if(year2)
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
农历转换成公历:知道一个农历日子,怎么计算每年对应的公历日子
很遗憾,你只能去查万年历。因为公历(现在用的是格里历,以前还曾用儒列历)和中国农历都不是严格按一个公式计算得到的,所以两个历法没有直接的公式。 试图用一个简单的公式,而不利用许多像万年历一样的数据(尽管可以简化),就达到公农历转换的目的,这是不可能的。我们能见到的所有公农历转换的软件,都存有多少不等的一些年份的历法数据。如果只是天文数据,其实都还是可以算的――因为天文周期十分稳定,我们只要严格地按天文周期福算就可以了。可是还有更为麻烦的一点,就是公历和农历这些历法,并不是完全严格地按照天文上的实际周期进行的,还有许多人为的因素。最著名的就是罗马皇帝几次修改2、8等月份长短,以及儒列历中因计算不准确而人为地去掉了十天等事。中国农历也有因为古代天文观测不准确造成的 *** 颁布的历法与天象不吻合的(我们不能苛求古人观测的精度)。所以这两部历法都是与一个时期社会有关的东西,也就没有一定的规律可循了。
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))),那就更像农历表示法了,不过因为农历每年开始日期都不一样,所以函数很难达到十分精确的结果,只能是将就着用。
还没有评论,来说两句吧...