首页 > 姓名打分

万年历的程序图(太阳天文推算)

太阳 姓名打分 08-05

万年历NS程序图谁会做?

你这不是做的挺不错的吗?? 93K鬼金羊

谁帮我画下万年历的程序图啊?

我晕……又是老师布置和布局的作业吧??如此简单容易的流程程序,你应该自己学着画。

然而,你程序图都没你怎样指导写完流程的呢——你要自己做啊。

这么做对自己也属于一种挑战啊!!!!!!!!!

祝 好 运!!!!!! 93K鬼金羊

谁知道怎么画C语言万年历的程序图?

printf("\n|====================The Calendar of Year %d====================|\n|",year); for(i=0;i<6;i++) {//先测算地i+1月和第i+7月的最大星期数 for(wd=0,k=0;k<7;k++)//日期表的第6行有日期,则wd!=0; wd+=date[i]⓹[k]+date[i+6]⓹[k]; wd=wd?6:5; printf("%2d %s %2d %s |\n|",i+1,title,i+7,title); for(j=0;j<wd;j++) { printf(" "); //左栏为i+1月,右栏为i+7月 for (k=0;k<7;k++) { if(date[i][j][k]) printf("%4d",date[i][j][k]); else printf(" "); } printf(" "); for(k=0;k<7;k++) { if(date[i+6][j][k]) printf("%4d",date[i+6][j][k]); else printf(" "); } printf(" |\n|"); } } puts("=================================================================|"); puts("Please input any key to quit。。。"); getchar(); return(0);}

提问人的追问 2009-06-08 09:25 不是画图吗??

回答人的补充 2009-06-08 09:40 - -#不晓得 那因该是 像思维图差不多的。。。

﹎。* 阴霾。 回答采纳率:27、3% 2009-06-08 09:21#include<stdio。h>

long int f(int year,int month)

{//f(年,月)=年-月,如月<3;要不然,f(年,月)=年

if (month <3)

return year-1;

else return year;

}

long int g(int month)

{//g( 月)=月+13,如月<3;要不然,g(月)=月+1

if(month<3)

return month + 13;

else

return month + 1;

}

long int n(int year,int month,int day)

{

return 1461L*f(year,month)/4+153L*g(month)/5+day;

}

int w(int year,int month,int day)

{

return(int) ((n(year,month,day)%7-621049L%7+7)%7);

}

int date⑫⓺⓻;

int day_tbl[]⑫={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

int main()

{

int sw,leap,i,j,k,wd,day;

int year;

char title[]="SUN MON TUE WED THU FRI SAT";

printf("Please input the yewr whose calendar you want to know:");

scanf("%d%*c",&year);

sw=w(year,1,1);

leap=year%4==0&&year%100||year%400==0;//判断闰年

for(i=0;i<12;i++)

for (j=0;j<6;j++)

for(k=0;k<7;k++)

date[i][j][k]=0;//将日期表置0

for(i=0;i<12;i++)//一年12个月

for(wd=0,day=1;day<=day_tbl[leap][i];day++)

{//将i+1月的日期填入日期表

date[i][wd][sw]=day;

sw=++sw%7;//每星期7天,以0~6计数

if (sw==0)

wd++;//日期表每七天一行,星期天开始新的一行

} 93K鬼金羊

C语言流程设计 万年历查询流程。

#include

int

leap

(int

year)

{if(year%4==0&&year%100!=0||year%400==0)

//判断是否是闰年

return

1;

else

return

0;

}

int

days_month

(int

month,int

year)

//判断大月和小月

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

//找出大月

return

31;

if(month==4||month==6||month==9||month==11)

//找出小月

return

30;

if(month==2&&leap(year)==1)

return

29;

//判断二月是29天还是29天

else

return

28;

}

int

firstday(int

month,int

year)

{int

w;

w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;

//判断每一个月开始的第1天是星期几

return

w;

}

main()

{int

i,j=1,k=1,a,b,month,year;

printf("\n

input

month

and

year:\n");

scanf("%d%d",&month,&year);

//输入月和年

b=days_month(month,year);

a=firstday

(month,year);

printf("

sun

mon

tue

wed

thu

fri

sat

\n");

//输出对应当月的日历

if(a==7)

{for(i=1;i<=b;i++)

{printf("%4d",i);

if(i%7==0)

{printf("\n");

}

}

}

if(a!=7)

{while

(j<=4*a)

{printf("

");

j++;

}。。。#include

int

leap

(int

year)

{if(year%4==0&&year%100!=0||year%400==0)

//判断是否是闰年

return

1;

else

return

0;

}

int

days_month

(int

month,int

year)

//判断大月和小月

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

//找出大月

return

31;

if(month==4||month==6||month==9||month==11)

//找出小月

return

30;

if(month==2&&leap(year)==1)

return

29;

//判断二月是29天还是29天

else

return

28;

}

int

firstday(int

month,int

year)

{int

w;

w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;

//判断每一个月开始的第1天是星期几

return

w;

}

main()

{int

i,j=1,k=1,a,b,month,year;

printf("\n

input

month

and

year:\n");

scanf("%d%d",&month,&year);

//输入月和年

b=days_month(month,year);

a=firstday

(month,year);

printf("

sun

mon

tue

wed

thu

fri

sat

\n");

//输出对应当月的日历

if(a==7)

{for(i=1;i<=b;i++)

{printf("%4d",i);

if(i%7==0)

{printf("\n");

}

}

}

if(a!=7)

{while

(j<=4*a)

{printf("

");

j++;

}

for(i=1;i<=b;i++)

{printf("%4d",i);

if(i==7*k-a)

{printf("\n");

k++;

}

}

}

printf("\n");实验名称:万年历的查询及打印

【内容】:设计一个查询并打印万年历的流程。

【步骤】:

1.

画出流程程序图;

2.

编写流程;

3.

调试流程,对调试过程中出现的问题进行剖析,找出错误的缘故并予改正;

4.

写出通过调试并修改正确的原流程。

【要求】:

1.

流程运行后,first of all在屏幕上显示主菜单:

1.

查询某年某月某日是星期几

2.

查询某年是否是闰年

3.

打印某年的全年日历

4.

退出

2.

在主菜单中输入1后,显示:

“请输入年月日(XXXX,XX,XX)”

运行后输出:XXXX年XX月XX日是星期X,是否继续查询(Y/N)?

假如输入Y,则重新显示

“请输入年月日(XXXX,XX,XX)”,要不然回到主菜单。

3.

在主菜单中输入2后,显示:

“请输入要查哪一年?(XXXX)”

运行后输出:XXXX年是(否)是闰年,是否继续查询(Y/N)?

假如输入Y,则重新显示,“请输入要查哪一年?(XXXX)”,要不然回到主菜单。

4.

在主菜单中输入3后,显示:

“请输入要打印的年份(XXXX)”

运行后输出XXXX年的日历,格式为:

XXXX

X(月数)

0

1

2

3

4

5

6

S

M

T

W

T

F

S

x

x

x

x

x

x

x

x

x

x

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

X(月数)

0

1

2

3

4

5

6

S

M

T

W

T

F

S

x

x

x

x

x

x

x

xx

 xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

xx

 运行完后显示:“是否继续打印(Y/N)?”

 假如输入Y,则重新显示,“请输入要打印的年份(XXXX)”,要不然回到主菜单。

5.

在主菜单中输入4后,显示:“是否要真的退出(Y/N)?”

假如输入Y,结束流程运行,要不然重新显示主菜单。

【提示】:

1、

闰年计算:满足下列二者之一,是闰年:

能被4整除,但不能被100整除;

能被4整除,且能被400整除。

2、闰年的二月是29天,平年的二月是28天

3、星期几的计算:

S=X-1+(X-1)/4+(X-1)/100+(X-1)/400+C

X是年份,C是该年从元旦开始到到这一日的天数。

S/7的余数既是星期数

例1:1982年12月26日

因为1982年不是闰年(不能被4整除),所以该年的二月是28天。

C=31+28+31+30+31+30+31+31+30+31+30+26=360

(1月到11月的天数+12月的实际天数)

S=1982-1+(1982-1)/4+(1982-1)/100+(1982-1)/400+360=2821、3925

S/7=2821/7=403

余数是0,所以该日是星期天。

例2:两千年3月8日

因为两千年是闰年(能被4整除,又能被100和400整除),所以该年的二月是29天。

C=31+29+8=68

(1月到2月的天数+3月的实际天数)

S=2000-1+(2000-1)/4+(2000-1)/100+(2000-1)/400+68=2551、757

S/7=2551/7=364

余数是3,所以该日是星期三。 93K鬼金羊

万年历流程设计思路

俺的是用C语言创作的

#include <stdio。h>

#include <stdlib。h>

#include <conio。h>

#include <string。h>

int Whatdate(int n);

int Isleapyear(int year);

void main(int argc,char *argv[])

{

unsigned int year,montag = 1,weektag;

char *month⑫ ={"JANUARY","FEBRUARU","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"};

int monthday⑫ = {31,28,31,30,31,30,31,31,30,31,30,31};

if(argc !=2 )

{

printf("Use this program like this:example9-16 3");

exit(0);

}

year = atoi(argv⓵);

if( Isleapyear(year) ) //预示是闰年

monthday⓵ = 29;

//计算此一年的第1天是星期几

weektag = Whatdate(year);

//打印

while(montag<=12)

{

int i;

printf( " ====%s====\n",month[montag-1] );

printf( "Sun Mon Tues Wed Thu Fri Sat\n" );

if(weektag!=7)

for(i=0;i<(int)weektag;i++)

printf(" ");

for(i=1;i<=monthday[montag-1];i++)

{

printf("%-8d",i);

if(weektag==6)

printf("\n");

weektag = (weektag+1) % 7;

}

montag++;

printf("\n\n");

}

}

int Whatdate(int n)

{

int week = 7,i;//以2006年的

if(2006>n) //往回到

{

for(i=1;i<=2006-n;i++)

{

if((week==1 && Isleapyear(2006-i)==0) || (week==2 && Isleapyear(2006-i)==1 ))

week = 7;

else if(week==1 && Isleapyear(2006-i))

week =6;

else

week = week -1 - Isleapyear(2006-i);

}

}

else if(2006<n)

{

for(i=0;i<n-2006;i++)

if( (week==7 && Isleapyear(2006+i)==0) || (week==6 && Isleapyear(2006+i)==1))

week = 1;

else if(week==7 && Isleapyear(2006+i))

week = 2;

else

week = week +1 +Isleapyear(2006+i);

}

return week;

}

int Isleapyear(int year)

{

if( (year%4==0 && year%100!=0) || year%400==0 )

return 1;

else

return 0;

}当然使用蔡勒公式了

最后附上我以前回答的一个。。。。知道地址

http://悟 真 网013 14944。net/question/9433604、html

万年历的 不过不实现阴历

怎样计算某一天是星期几?

slowtiger 发表于 2005-10-11 21:43:00

怎样计算某一天是星期几?

—— 蔡勒(Zeller)公式

历史上的某一天是星期几?未来的某一天是星期几?关于此问题,有许多计算公式(两个通用计算公式和一些分段计算公式),其中最出名的是蔡勒(Zeller)公式。

即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1。2月要看作上一年的13。14月来计算,打比方说2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。

1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)

算出来的W除以7,余数为几就是星期几。假如余数为0,则为星期日。

以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:

蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1

=49+[12、25]+5-40+[28、6]

=49+12+5-40+28

=54 (除以7余5)

即2049年10月1日(100周年国庆)是星期五、

你的生日(生下来时、今年、明年)是星期几?不妨试一试。

然而,以上公式只适合于1582年10月15日后来的情形(那个时候的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。

过程的推导:(对推理不有兴趣的可略过不看)

星期制度是一种有古老守旧的制度。据说由于《圣经·创世纪》中规定上帝用了六

天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排本人的工作和生

活,而星期日是休息日。在现实的角度而言,以七天为一个周期,长短也比较合得来。所

以尽管咱们国家的传统工作周期是十天(打比方说王勃《滕王阁序》中说的“十旬休暇”,其实就是

指guanyuan的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。

在平时生活中,我们往往遇见要晓得某一天是星期几的问题。偶尔,我们还想知

道历史上某一天是星期几。通常来讲,解决这一个办法的有效办法是看日历,不过我们总不会

随时不离身带着日历,更没有可能随时不离身带着几千年的万年历。如果是想在计算机编程中

计算某一天是星期几,预先把一本万年历存进去就更不实际了。这时候是否有办法通

过什么公式,从年月日推出这一天是星期几呢?

答案是肯定的。其实也就是说我们也往往在这样做。我们先举一个简单容易的例子。打比方说,知道

了2004年5月1日是星期六,那么2004年5月31日“世界无烟日”是星期几就不难精密推算出

来。俺们是可以掰着指头从1日数到31日,同时数星期,最后可以数出5月31日是星期一。

其实也就是说运用数学计算,可以不用掰指头。大家都清楚星期是七天一轮回的,所以5月1日是星

期六,七天后来的5月8日也是星期六。在日期上,8-1=7,正所谓7的倍数。同样,5月15

日、5月22日和5月29日也是星期六,它们的日期和5月1日的差值分别为14。21和28,也

都是7的倍数。那么5月31日呢?31-1=30,固然不是7的倍数,不过31除以7,余数是2,

这便是说,5月31日的星期,是在5月1日的星期之后两天。星期六之后两天正所谓星期一。

这个简单容易的计算告知我们计算星期的一个基本思路:first of all,先要晓得在想算的日子

之前的一个确定的日子是星期几,拿这一天做为精密推算的标准,亦即等同于一个计算的

“原点”。其次,知道想算的日子和这个确定的日子之间相差多少天,用7除这个日期

的差值,余数就预示想算的日子的星期在确定的日子的星期之后多少天。假如余数为

0,就预示这两天的星期相同。显然,假如把这个作为“原点”的日子选为星期日,那

么余数正好就等于星期几,这样计算就更方便了。

不过直接计算两天之间的天数,还是不免繁琐。打比方说1982年7月29日和2004年5月

1日之间相隔7947天,就不是一下子可以推算出来的。它包括三段时间:一,1982年7月29

日以后此一年的剩余天数;二,1983-2003这二十一个整年的全部天数;三,从2004年

元旦到5月1日经过的天数。第2段相对较好算,它等于21*365+5=7670天,之因此要加

5,是由于这段时间内有5个闰年。第1段和第3段就比较麻烦了,打比方说第3段,需要把

5月之前的四个月的天数累加起来,再加上日期值,即31+29+31+30+1=122天。同理,第

一段需要把7月后来的五个月的天数累加起来,再加上7月剩下的天数,一共是155天。

所以总共的相隔天数是122+7670+155=7947天。

仔细想想,假如把“原点”日子的日期选为12月31日,那么第1段时间亦即一个

整年,这样一来,第1段时间和第2段时间就能够合并计算,整年的总数正好等同于两

个日子的年份差值减一。假如进一步把“原点”日子选为公元前1年12月31日(或者天文

学家所使用的公元0年12月31日),这个整年的总数就恰巧是想算的日子的年份减一。这

样简化之后,就只须计算两段时间:一,如此多整年的总天数;二,想算的日子是这一

年的第几天。巧的是,依照公历的年月设置,这样反推回去,公元前1年12月31日恰巧是

星期日,总之,这样算出来的总天数除以7的余数恰巧是星期几。那么如今的问题就

仅有一个:如此多整年里面有多少闰年。还得需要了解公历的置闰规则了。

大家都清楚,公历的平年是365天,闰年是366天。置闰的方式方法是能被4整除的年份在

2月加一天,但能被100整除的不闰,能被400整除的又闰。于是,像1600、2000、二十四00

年都是闰年,而1700、1800、1900、2100年都是平年。公元前1年,按公历也是闰年。

于是,对于从公元前1年(或公元0年)12月31日到某一日子的年份Y之间的所有整年

中的闰年数,就等于

[(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400],

[。。。]预示只取整数部分。第1项预示尚需加上被4整除的年份数,第2项预示需要去掉

被100整除的年份数,第3项预示需要再加上被400整除的年份数。之所以Y要减一,这

样,我们就获得了第1个计算某一天是星期几的公式:

W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1)

其中D是这个日子在此一年中的累积天数。算出来的W就是公元前1年(或公元0年)12月

31日到这一天之间的间隔日数。把W用7除,余数为几,这一日便是星期几。打比方说我们来

算2004年5月1日:

W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] +

(31+29+31+30+1)

= 731702,

731702 / 7 = 104528……6,余数是六,说明这一天是星期六。这和事实是符合的。

上面的公式(1)固然非常准确,不过计算出来的数字太大了,使用起来很不方便。仔

细想想,其实也就是说这个间隔天数W的用数仅仅是为了得到它除以7后来的余数。这启发我们是

不是可以简化这个W值,只要找一个和它余数一样的较小的数来代替,用数论上的术语

来说,就是找一个和它同余的较小的正整数,照样可以计算出准确的星期数。

显然,W这么大的缘故是由于公式中的第1项(Y-1)*365太大了。其实也就是说,

(Y-1)*365 = (Y-1) * (364+1)

= (Y-1) * (7*52+1)

= 52 * (Y-1) * 7 + (Y-1),

这个结果的第1项是一个7的倍数,除以7余数是0,因此(Y-1)*365除以7的余数其实也就是说就

等于Y-1除以7的余数。这个关系可以预示为:

(Y-1)*365 ≡ Y-1 (mod 7).

其中,≡是数论中预示同余的符号,mod 7之义是指在用7作模数(亦即除数)的情

况下≡号两边的数是同余的。于是,完全可以 使用(Y-1)代替(Y-1)*365,这样我们就得到

了那个著名的、更是很多见到的计算星期几的公式:

W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (2)

这个公式固然好用多了,不过还不是最好用的公式,由于累积天数D的计算也比较麻

烦。是还是不是可以 使用月份数和日期直接计算呢?答案也是肯定的。我们不妨来观察一下各

个月的日数,列表如下:

月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

--------------------------------------------------------------------------

天 数: 31 28(29) 31 30 31 30 31 31 30 31 30 31

假如把这个天数都减去28(=4*7),不作用与影响W除以7的余数值。这样我们就得到另一张

表:

月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

------------------------------------------------------------------------

剩余天数: 3 0(1) 3 2 3 2 3 3 2 3 2 3

平年累积: 3 3 6 8 11 13 16 19 21 二十四 26 29

闰年累积: 3 4 7 9 12 14 17 20 22 25 27 30

认真观察的话,我们会发现除去1月和2月,3月到7月这五个月的剩余天数值是3,2,3,2,

3;8月到12月这五个月的天数值也是3,2,3,2,3,恰巧是一个重复。对应的累积天数中,

后一月的累积天数和前一月的累积天数之差减去28就是这个重复。正所谓由于这种规律的

存在,平年和闰年的累积天数可以 使用数学公式很方便地表达:

╭ d; (当M=1)

D = { 31 + d; (当M=2) (3)

╰ [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d + i. (当M≥3)

其中[。。。]仍预示只取整数部分;M和d分别为想算的日子的月份和日数;平年i=0,闰年

i=一、对于M≥3的表达式需要说明一下:[13*(M+1)/5]-7算出来的就是上面第2个表中的

平年累积值,再加上(M-1)*28就是想算的日子的月份之前的所有月份的总天数。这是一

个很巧妙的办法,利用取整运算来实现3,2,3,2,3的循环。打比方说,对2004年5月1日,有:

D = [ 13 * (5+1) / 5 ] - 7 + (5-1) * 28 + 1 + 1

= 122,

这正所谓5月1日在2004年的累积天数。

如果,我们再变通一下,把1月和2月当成是上一年的“13月”和“14月”,不但仍

然符合这个公式,而且由于这样一来,闰日成了上一“年”(一共有14个月)的最后一

天,成了d的一部分,于是平闰年的作用与影响也去掉了,公式就简化成:

D = [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d. (3≤M≤14) (4)

上面计算星期几的公式,也就能够进一步简化成:

W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] - 7

+ (M-1) * 28 + d.

由于里边 的-7和(M-1)*28两项皆可以被7整除,所以去掉这两项,W除以7的余数不变,

公式变成:

W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] + d.

(5)

诚然,须留意1月和2月已经确定被当成了上一年的13月和14月,所以在计算1月和2月的日子

的星期时,除了M要按13或14算,年份Y也要减一。打比方说,2004年1月1日是星期四,用这

个公式来算,有:

W = (2003-1) + [(2003-1)/4] - [(2003-1)/100] + [(2003-1)/400] + [13*(13+1)/5]

+ 1

= 2002 + 500 - 20 + 5 + 36 + 1

= 25二十四;

25二十四 / 7 = 360……4.这和实际是一致的。

公式(5)业已是从年、月、日来算星期几的公式了,但它还不是最简练的,对于年

份的处理还有改进的方式方法。我们先来用这个公式算出每个世纪第1年3月1日的星期,列

表如下:

年份: 1(401,801,…,2001) 101(501,901,…,2101)

--------------------------------------------------------------------

星期: 4 2

====================================================================

年份:201(601,1001,…,2201) 301(701,1101,…,2301)

--------------------------------------------------------------------

星期: 0 5

可以看出,每隔四个世纪,这个星期就重复一次。如果我们把301(701,1101,…,2301)

年3月1日的星期数视为-2(按数论中对余数的定义,-2和5除以7的余数相同,所以可

以做如此的变换),那么这个重复序列正好就是一个4,2,0,-2的等差数列。据此,我们

能够得到下面的计算每个世纪第1年3月1日的星期的公式:

W = (4 - C mod 4) * 2 - 4. (6)

式中,C是该世纪的世纪数减一,mod预示取模运算,即求余数。打比方说,对于2001年3月

1日,C=20,则:

W = (4 - 20 mod 4) * 2 - 4

= 8 - 4

= 4.

把公式(6)代入公式(5),经过变换,可得:

(Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] ≡ (4 - C mod 4) * 2 - 1

(mod 7). (7)

于是,公式(5)中的(Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400]这四项,在计算

每个世纪第1年的日期的星期时,可以 使用(4 - C mod 4) * 2 - 1来代替。这个公式写

出来就是:

W = (4 - C mod 4) * 2 - 1 + [13 * (M+1) / 5] + d. (8)

有了计算每个世纪第1年的日期星期的公式,计算这个世纪其他各年的日期星期的公式

就比较容易获得了。由于在一个世纪里,末尾为00的年份是最后一年,所以就用不着再考

虑“一百年不闰,四百年又闰”的规则,只须考虑“四年一闰”的规则。仿照由公式(1)

简化为公式(2)的方式方法,我们比较容易就能够从式(8)得到一个比公式(5)更简单容易的计算任意

一天是星期几的公式:

W = (4 - C mod 4) * 2 - 1 + (y-1) + [y/4] + [13 * (M+1) / 5] + d. (9)

式中,y是年份的后两位数字。

若是再考虑到取模运算不是四则运算,我们还不错把(4 - C mod 4) * 2进一步改写

成只含四则运算的表达式。由于世纪数减一C除以4的商数q和余数r之间有如下关系:

4q + r = C,

其中r其实就是 C mod 4,于是,有:

r = C - 4q

= C - 4 * [C/4]. (10)

(4 - C mod 4) * 2 = (4 - C + 4 * [C/4]) * 2

= 8 - 2C + 8 * [C/4]

≡ [C/4] - 2C + 1 (mod 7). (11)

把式(11)代入(9),得到:

W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (12)

这个公式由世纪数减1。年份末两位、月份和日数即可算出W,再除以7,得到的余数为

几就预示这一天是星期几,唯一需要变通的是要把1月和2月当成上一年的13月和14月,

C和y都按上一年的年份取值。于是,人们普遍认为这是计算任意一天是星期几的最有利的

公式。这个公式最早是由德国数学家克里斯蒂安·蔡勒(Christian Zeller, 1822-

1899)在1886年推导出的,因此通称为蔡勒公式(Zeller’s Formula)。为方便口算,

式中的[13 * (M+1) / 5]也常常写成[26 * (M+1) / 10]。

此刻仍然使俺们来算2004年5月1日的星期,显然C=20,y=4,M=5,d=1,代入蔡勒

公式,有:

W = [20/4] - 40 + 4 + 1 + [13 * (5+1) / 5] + 1 - 1

= -15.

注意和提防负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了方便

计算,俺们是可以给它加上一个7的整数倍,使它变为一个正数,打比方说加上70,得到5五、

再除以7,余6,说明这一天是星期六。这和实际是一致的,也和公式(2)计算所得的结

果一致。

最后需要说明的是,上面的公式都是基于公历(格里高利历)的置闰规则来思索

的。对于儒略历,蔡勒也推出了对应的公式是:

W = 5 - C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (13)

========================================

(2005-10-20 22:25:00) --------(4575252)

计算任何一天是星期几的几种算法

最近在论坛上看见有人在问星期算法,特别整理了一下,这几个算法都是从网上搜索而来,算法的实现是我在项目中写的。希望能够帮到你。

一:常用公式

W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

Y是年份数,D是这一天在此一年中的累积天数,亦即这一天在此一年中是第几天。

二:蔡勒(Zeller)公式

w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下,w:星期;c:世纪;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1。2月要看作上一年的13。14月来计算,打比方说2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。

相对于通用通用计算公式来讲,蔡勒(Zeller)公式大大降低了计算的复杂度。

三:对蔡勒(Zeller)公式的改进

作者:冯思琮

相对于另外一个通用通用计算公式来讲,蔡勒(Zeller)公式大大降低了计算的复杂度。然而,笔者给出的通用计算公式好像更加简洁(包括运算过程)。现将公式列于其下:

W=[y/4]+r (y/7)-2r(c/4)+m’+d

公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意和提防:在笔者给出的公式中,y为润年时1’=5;2’=1)。其他符号与蔡勒(Zeller)公式中之寓意相同。

四:基姆拉尔森计算公式

这个公式名称是我给命名的,哈哈愿家人们不要见怪。

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

在公式中d预示日期中的日数,m预示月份数,y预示年数。

注意和提防:在公式中有个和其它公式不同的地方:

把一月和二月视为上一年的十三月和十四月,例:假如是2004-1-10则换算成:2003-13-10来代入公式计算。脚本说明:

第1步:把如下代码加入<body>区域中

<STYLE TYPE="text/css">

。normal{BACKGROUND: #ffffff}

。today {font-weight:bold;BACKGROUND: #6699cc}

。satday{color:green}

。sunday{color:red}

。days {font-weight:bold}

</STYLE>

<SCRIPT LANGUAGE="JavaScript">

var months = new Array("一月", "二月", "三月",

"四月", "五月", "六月", "七月", "八月", "九月",

"十月", "十一月", "十二月");

var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,

30, 31, 30, 31);

/*var days = new Array("Sunday", "Monday", "Tuesday",

"Wednesday", "Thursday", "Friday", "Saturday");*/

var days = new Array("日","一", "二", "三",

"四", "五", "六");

function getDays(month, year) {

if (1 == month)

return ((0 == year % 4) && (0 != (year % 100))) ||

(0 == year % 400) ? 29 : 28;

else

return daysInMonth[month];

}

function getToday() {

//得到今天的年,月,日

this。now = new Date();

this。year = this。now。getFullYear();

this。month = this。now。getMonth();

this。day = this。now。getDate();

}

today = new getToday();

function newCalendar() {

today = new getToday();

var parseYear = parseInt(document。all。year

[document。all。year。selectedIndex]。text);

var newCal = new Date(parseYear,

document。all。month。selectedIndex, 1);

var day = -1;

var startDay = newCal。getDay();

var daily = 0;

if ((today。year == newCal。getFullYear()) &&(today。month == newCal。getMonth()))

day = today。day;

var tableCal = document。all。calendar。tBodies。dayList;

var intDaysInMonth =getDays(newCal。getMonth(), newCal。getFullYear());

for (var intWeek = 0; intWeek < tableCal。rows。length;intWeek++)

for (var intDay = 0;intDay < tableCal。rows[intWeek]。cells。length;intDay++)

{

var cell = tableCal。rows[intWeek]。cells[intDay];

if ((intDay == startDay) && (0 == daily))

daily = 1;

if(day==daily)

//今天,调用今天的Class

cell。className = "today";

else if(intDay==6)

//周六

cell。className = "sunday";

else if (intDay==0)

//周日

cell。className ="satday";

else

//平常

cell。className="normal";

if ((daily > 0) && (daily <= intDaysInMonth))

{

cell。innerText = daily;

daily++;

}

else

cell。innerText = "";

}

}

function getDate() {

var sDate;

//这段代码处理鼠标点击的情形

if ("TD" == event。srcElement。tagName)

if ("" != event。srcElement。innerText)

{

sDate = document。all。year。value + "年" + document。all。month。value + "月" + event。srcElement。innerText + "日";

alert(sDate);

}

}

</SCRIPT>

<input type="hidden" name="ret">

<TABLE ID="calendar" cellspacing="0" cellpadding="0" border=1>

<THEAD>

<TR>

<TD COLSPAN=7 ALIGN=CENTER>

<SELECT ID="month" ONCHANGE="newCalendar()">

<SCRIPT LANGUAGE="JavaScript">

for (var intLoop = 0; intLoop < months。length;

intLoop++)

document。write("<OPTION VALUE= " + (intLoop + 1) + " " +

(today。month == intLoop ?

"Selected" : "") + ">" +

months[intLoop]);

</SCRIPT>

</SELECT>

<SELECT ID="year" ONCHANGE="newCalendar()">

<SCRIPT LANGUAGE="JavaScript">

for (var intLoop = today。year-100; intLoop < (today。year + 64);

intLoop++)

document。write("<OPTION VALUE= " + intLoop + " " +

(today。year == intLoop ?

"Selected" : "") + ">" +

intLoop);

</SCRIPT>

</SELECT>

</TD>

</TR>

<TR CLASS="days">

<SCRIPT LANGUAGE="JavaScript">

document。write("<TD class=satday>" + days[0] + "</TD>");

for (var intLoop = 1; intLoop < days。length-1;

intLoop++)

document。write("<TD>" + days[intLoop] + "</TD>");

document。write("<TD class=sunday>" + days[intLoop] + "</TD>");

</SCRIPT>

</TR>

</THEAD>

<TBODY border=1 cellspacing="0" cellpadding="0" ID="dayList"ALIGN=CENTER ONCLICK="getDate()">

<SCRIPT LANGUAGE="JavaScript">

for (var intWeeks = 0; intWeeks < 6; intWeeks++) {

document。write("<TR style='cursor:hand'>");

for (var intDays = 0; intDays < days。length;

intDays++)

document。write("<TD></TD>");

document。write("</TR>");

}

</SCRIPT>

</TBODY>

</TABLE>

<Script Language="JavaScript1、2">

function Cancel() {

document。all。ret。value = "";

window。close();

}

</script>

第2步:把<body>中的内容改为:

<body ONLOAD="newCalendar()" OnUnload="window。returnValue = document。all。ret。value;"> 93K鬼金羊

万年历简单介绍及详细资料

历史由来

第1个版本

如果想追寻万年历的来历,那故事得从远古时代的商朝说起……有名樵夫唤做万年,有一天他上山砍柴,砍罢了就坐在树下休息。他眼望着树影出神,心里想的,仍为怎样将节令定准的事。毫无察觉过了大半个时辰,他才发现地上的树影已愉愉地移动了方位。万年灵机一动,心想,何不利用日影的长短来计算时间呢?回到家后,万年就设计了一个"日晷仪"。那么,一遇上阴雨天,日晷仪又失去效用了。93K鬼金羊

有一天,万年在泉边喝水,看到崖上的水很有节奏的往下滴,规律的滴水声又启发了他的灵感。回家后,万年就动手做了一个五层的漏壶,利用漏水的方式方法来计时。这么一来,无论天气阴晴,皆可以正确地掌握时间了。有了计时的工具,万年更加用心的观察天时节令的变化。经过长期的归纳,他发现,每隔三百六十多天,天时的长短就会重复一次。只要搞清楚日月运行的规律,就不愁节令不准了。93K鬼金羊

万年就带着自制的日晷仪及水漏壶去觐见天子祖乙,说明节令不准与天神毫不相干。祖乙觉得万年说的很有道理,就把万年留下,在天坛前盖起日晷台、漏壶亭,又派了十二个童子供万年差遣。从此便以后,万年得以专心致志的研究时令。经过一段日子,祖乙派阿衡去了解万年制历的情形。万年拿出自己精密推算出的初步成果,说:日出日落三百六,循环往复从头来。草木荣枯分四时,一岁月有十二圆。93K鬼金羊

阿衡听后,非常忐忑不安,他担心制出准确的历法,得到天子重用,直接的威胁到他的地位。于是阿衡就以重金收买了一名刺客,准备行刺万年。无奈万年全心研究时令,几乎从不离开所住的日月阁。刺客只好趁夜深人静之时,挽起了箭射杀万年。只听得嗖的一声,一箭射中了万年的胳膊,万年应声倒下。童子们高喊抓拿刺客,守卫的兵士及时抓住了刺客,将他扭送天子。93K鬼金羊

祖乙问明了是阿衡的诡计,就下令将阿衡收押,亲自到日月阁来探望万年。万年就把自己最新的研究成果报告给祖乙:申星追上了百星蚕百星,星象复原,子时夜交,旧岁已完,时又始春,希望天子定个节名吧!祖乙说:春为岁首,就叫春节吧。那个时候祖乙见万年为了制历,日夜劳瘁又受了箭伤,心中不忍,就请他入宫调养身体,万年答道:"多谢天子厚爱,只是当前的太阳历还是草历,不够准确,要把岁末尾时也闰进去。要不然,久而久之,又会造成节令失常。为了不负众望,我必须留下来,继续把太阳历定准。"又经过了数十个寒暑,万年精心制定的太阳历终于完成了。当他把太阳历献给祖乙时,已是个白发苍苍的老人了。 祖乙深受感动,就把太阳历定名为万年历,并封万年为日月寿星,上面便是万年历名称的来历。93K鬼金羊

93K鬼金羊

第2个版本

相传,在很久以前,有个名叫万年的青年,看见那个时候节令很乱,想把节令定准。一天,他上山砍柴,坐在树阴下休息,树影的移动启发了他,他设计了一个测日影计天时的晷仪。那么,天阴雨雾,作用与影响测量。之后的日子,山崖上的滴泉挑起了他的兴趣,他又动手做了一个五层漏壶。天长日久,他发现每隔三百六十多天,天时的长短就会重复一遍。那个时候的国君叫祖乙,天气风云的不测,使他很苦恼。93K鬼金羊

一个名字叫阿衡的大臣,为讨好皇上,奏称要设天台敬祭天神。祖乙认为有理,便带领百官去祭天,却无济于事。万年知道后,忍不住就带着日晷和漏壶去见皇上,对祖乙讲清了日月运行的道理。祖乙听后龙颜大悦,感到有道理。于是把万年留下,在天坛前修建日月阁,筑起日晷台和漏壶亭。并派了十二个童子服侍万年。祖乙对万年说:"希望你能测准日月规律,精密推算出准确的晨夕时间,创建历法,为天下的黎民百姓造福。"有次,祖乙传旨要阿衡去了解万年测试历法的进展情况。当他登上日月坛时,看到天坛边的石壁上刻着:日出日落三百六,循环往复从头来。草木枯荣分四时,一岁月有十二圆。阿衡见此,知道万年的历法已研究成功,心中忐忑不安。他万分惧怕万年因创建历法而得宠,国君会怪罪自己提出祭祀天神的主意。因此,他阴谋策划,派了一个刺客去除掉万年。刺客攀上日月阁,见万年正在阁上观察星斗,便张弓搭箭,准备射死他。93K鬼金羊

万年历

谁知,刺客被卫士发现,被当场缉拿。祖乙知后,惩处了阿衡,亲自登上日月阁看望万年。万年指著天象,对祖乙说:"此刻正所谓十二个月满,旧岁已完,新春复始,祈请国君定个节吧。"祖乙说:"春为岁首,就叫春节吧。"冬去春来,年复一年。之后的日子,万年经过长期观察,精心精密推算,制定出了准确的太阳历。当他把太阳历呈奉给继任的国君时,已是满面银须。国君深为感动,为纪念万年的功绩,便将太阳历命名为"万年历",封万年为日月寿星。以后,人们在过新年时挂上寿星图,据说就是为了纪念德高望重的万年的。93K鬼金羊

择日宜忌

黄历之中普通人看的最多的,应是每日宜做什么、不适宜做什么的那一项,命理预测师、择日师也由此栏所记,加上每日吉时凶时之参考,来为人谋划日期。待读者了解之后,以后就不用去找择日师了。然而,若涉及个人八字项目,还是要找人排一排好。假如自己查询吉日,不找算命师,可以翻开万年历查询当天的宜忌。举例:93K鬼金羊

以八十五年一月一日为例,写有:93K鬼金羊

宜:安床、纳财、栽种、结网、扫舍宇、祭祀、沐浴、裁衣、进人、整手足。93K鬼金羊

忌:开市、剪发、牧养、纳畜、造畜稠、伐木、做梁、安葬、破土、开生坟。93K鬼金羊

我们由内文即可「大约」知道意思,若要「开市」,不要选一日,可选三日,吉时是在「子午酉亥」,亦即凌晨十一至一时、中午十一至一时、下午五至七时及晚上九至十一时,以作息时间言,可选中午十一时至一时之间为佳。另外再注意和提防当日「冲兔煞东」,肖兔的人要回避,勿朝东方去。把这几个项目综合起来,就能够成为择日师了。93K鬼金羊

现就将农民历皆有的择日用事术语批注列于下:93K鬼金羊

祭祀:指祠堂之祭祀、即拜祭祖先或庙寺的祭祀礼拜、拜神明等事。93K鬼金羊

祈福:祈求神明降福或设醮还愿之事。93K鬼金羊

求嗣:指向神明祈求后嗣(子孙)之意。93K鬼金羊

:神佛像塑成后、供奉上位之事。93K鬼金羊

塑绘:之绘尽或雕刻神像、画雕人像等。93K鬼金羊

出行:指外出旅行、观光游览。93K鬼金羊

齐醮:设醮建立道场祈拜、求平安等事。93K鬼金羊

出火:谓移动神位,「火」指「香火」来讲。93K鬼金羊

纳采:出嫁,缔出嫁姻的仪式、受授聘金。93K鬼金羊

裁衣:裁制新娘衣服或制作寿衣。93K鬼金羊

合:制作蚊帐之事。93K鬼金羊

冠笄:「冠」指男、「笄」指女、举行男女成人的仪式、叫作冠笄。93K鬼金羊

嫁:男娶女嫁,举行出嫁大典的吉日。93K鬼金羊

纳婿:指男方入赘于女方为婿之意。同嫁娶。93K鬼金羊

沐浴:指沐浴斋戒来讲。剃头:初生婴儿剃胎头或削发出家。93K鬼金羊

万年历

整手足甲:初生婴儿第1次修剪手足甲。93K鬼金羊

分居:指大家庭分家、各自另起炉灶之意。93K鬼金羊

进人口:指收纳养子女来讲。93K鬼金羊

解除:指冲洗清扫宅舍、解除灾厄等事。93K鬼金羊

修造:指阳宅之坚造与修理。93K鬼金羊

起基动土:建筑时、第1吹动起锄头挖土。93K鬼金羊

伐木做梁:砍伐树木制作屋顶梁木等事。93K鬼金羊

竖柱:竖立建筑物的柱子。93K鬼金羊

上梁:装上建筑物屋顶的梁木。同架马。93K鬼金羊

开柱眼:指作柱木之事。93K鬼金羊

穿屏扇架:制作门扇、屏障等工作。93K鬼金羊

安门:房屋装设门户等工事。93K鬼金羊

盖屋合脊:装盖房子的屋顶等工作。93K鬼金羊

求医疗病:仅指求医治疗慢性痼疾或动手术。93K鬼金羊

安床:指安置卧床卧铺之意。93K鬼金羊

移徙:指搬家迁移人主所之意。93K鬼金羊

入宅:即迁入新宅、所谓「新居落成典礼」也。93K鬼金羊

挂匾:指悬挂招牌或各式匾额。93K鬼金羊

开市:开业之意。商店行号开张做生意。「开幕礼」「开工」同。包括:年头初开始营业或开工等事;新设店铺商行或新厂开幕等事。93K鬼金羊

立券交易:订立各式契约相互买卖之事。93K鬼金羊

纳财:购置产业、进货、收帐、收租、讨债、贷款、五谷入仓等。93K鬼金羊

酝酿:指酿酒、造酱料等事。93K鬼金羊

捕捉:扑灭农作物害虫或生物。93K鬼金羊

栽种:种植物「接果」「种田禾」同。93K鬼金羊

畋猎:打猎或捕捉禽兽。93K鬼金羊

纳畜:买入家畜饲养之事。93K鬼金羊

教牛马:谓训练牛马之工作。93K鬼金羊

破屋坏垣:指拆除房屋或围墙。93K鬼金羊

拆卸:拆掉建筑物。93K鬼金羊

开井、开池:开凿水井、挖掘池塘。93K鬼金羊

作陂、放水:建筑蓄水池、将水灌入蓄水池。93K鬼金羊

开厕:建造厕所。93K鬼金羊

造仓库:建筑仓库或修理仓库。93K鬼金羊

塞穴:指堵塞洞穴或蚁穴等。93K鬼金羊

平治道涂:指铺平道路等工事。93K鬼金羊

修墓:修理坟墓等事。93K鬼金羊

万年历

启攒:指「洗骨」之事。俗谓「拾金」也。93K鬼金羊

开生坟:开造坟墓。合寿木:制作棺材。93K鬼金羊

谢土:建筑物完工后所举行的祭祀。93K鬼金羊

安葬:举行埋葬等仪式。93K鬼金羊

入殓:将尸体放入棺材之意。93K鬼金羊

成服、除服:穿上丧服、脱下丧服。93K鬼金羊

移柩:举行葬仪时、将棺木移出屋外之事。93K鬼金羊

破:仅指埋葬用的破土,与一般建筑房子的「动土」不同。即「破土」属阴宅,「动土」指阳宅也。现今江湖上多已滥用,择日时,须辨别之。93K鬼金羊

阳历与农历

中国历史上使用过的历法,有阳历、农历和阴阳合历,"盲年"是阴阳合历某种"置正"安排的结果。93K鬼金羊

阳历,或许是我们的祖先最早使用的历法,它依据太阳运行规律制定。古代人们以为太阳绕地球运行,转动一周为一年--今日大家都清楚是地球绕太阳公转的周期,但古代人们的认识却相反。据学者考证,战国时还有太阳历,一年十个月,以天干为名,每月三十六日,分三旬,旬以地支为名,如此十个月三百六十日,加上五至六天不入干支的"废日",一年就是三百六十五日或三百六十六日。在那种情况下,节气的安排first of all有"夏至"、"冬至",继而又有"春分"、"秋分",季节上的回归年先分春秋二季,后来再分出一年四季,以至24节气。古时候文献《管子》中有这种历法的痕迹,彝族和西南少数民族的火把节与之有关。岭南民间到现在还流传"冬至大过新年"的讲法,就是民间对这种历法的记忆残留。古代人们确实曾经以"一阳更始"的冬至作为元旦。93K鬼金羊

此外,春秋战国时代有采用十二辰(地支)纪月,而十二辰加时制度至迟西汉时已被采用。西汉末到现在,一直用干支来纪年。这便是干支历。它以立春为岁首,交节日为月首。年长即回归年,一个月含两个节气。在干支历中,年月日全由太阳视运动决定而与太阴月相无关,因此这是一种阳历。 93K鬼金羊

农历是按月亮的盈亏变化来制定的。一个朔望月的周期是二十九或三十天,年的长短只是月的整倍数,与回归年无关。月也与四季寒暑无关。希腊历和回历都属于这种历法。它的一年中,也没有可能出现"双春"、"盲年"。93K鬼金羊

阴阳合历,是结合太阳和月亮运行的周期制定的。一年按太阳的运行分为24节气,又依照月亮的运行分为月。小月、大月十二个加起来,只有三百五十四天或三百五十五天。两者相比,相差约十一天。为了协调二者,古代人们采取"设闰"的办法来处置,若干年中就有一年是十三个月的。从商代的甲骨中还不错看见"十三月"的记录载入,就是设闰的明证。上世纪有学者报告,南方的瑶族还保存著"十三月"的叫法。现行"十九年七闰"的制度起源相当早。咱们国的历史,自《春秋》以下,就有干支历日可查,足以为证。93K鬼金羊

但置闰月,未必就造成一年两个"立春",或没有"立春"。这里又涉及"置正"的问题,即以那一个月为正月。从历史记录载入来看,这种"置正"比较复杂:93K鬼金羊

夏朝以寅月为正月,称为建寅;93K鬼金羊

商朝以今十二月为正月,建丑;93K鬼金羊

周朝以十一月为正月,建子;93K鬼金羊

秦朝以十月为正月,建亥。93K鬼金羊

汉朝建立,初承秦制,以为得水德,亦建亥;后来到武帝时,经落下闳精密推算,又改成夏历,以寅月为正月。93K鬼金羊

不同"置正",就有不同的新年起点。例如建寅的,就以寅月的起点为元旦。这种办法,自汉武以来,二千年中,虽经不断完善,但大致沿用不变。93K鬼金羊

其实也就是说两个"立春"的现象(又叫"两头春"),但是是阴历有闰月了,在一年的时间跨度上超过了24节气的周期长度的问题。而公历绝对没有这一现象,由于公历一年有365或366天,与24节气的周期长度相约。而阴历有闰月时(即有13个月)一年长达383~384天!93K鬼金羊

万年历App

随着移动网际网路的兴起,网际网路不但提供线上万年历,还提供更为便捷的万年历App。万年历App以中华文化为根基,提供便捷公历、阴历日期查询,也蕴含了黄历有关的内容,如择吉日、每日宜忌等;依据万年历及现行政管理办法,万年历App还提供节假日信息查询,节日节气提醒等。93K鬼金羊

线上万年历

万年历算星期几只要随便说出公元几几年几月几日就能够马上算出是星期几。 93K鬼金羊

万年历

只要计算出日的代码,月份代码,年份代码。三个加起来除以七的余数就是星期几,(如余数为三,则就是星期三)。93K鬼金羊

日的代码计算:日的代码最简单,就是它本身,是几号就是几。93K鬼金羊

月份代码计算:月份代码也很简单,下面有十二个数:1 4 4 7 2 5 7 3 6 1 4 6,分别代表一至十二月份每一个月的代码。打比方说,九月份的代码为六、(据来宾介绍,他是用逆推的方式方法,计算出这12个月份代码的,即知道某年某月某日是星期几,反过来精密推算月份代码。)93K鬼金羊

年份代码计算:年份代码相对比较复杂,先记住两千年相应的年份代码是4,这是基础代码,牢记即可。如果大于两千年,打比方说2010年,则相应的年份代码是(2010-2000)÷4=2……2,再用基数代码4减去2倍的商加上余数再加一、即4-2×2+2+1=3,则2010年相应的年份代码为三、假如没有余数,即润年,则余数后面的1也不必加。打比方说2008年,相应的年份代码为0。93K鬼金羊

万年历

如果小于两千年,打比方说1991年,则相应的年份代码是(2000-1991)÷4=2……1,再用基数代码4加上2倍的商减去余数。 即4+2×2-1=7,则1991年相应的年份代码为7。93K鬼金羊

再记住1个特殊情况,即润年的3到12月份到最后要加一、举个例子吧,打比方说1992年8月27日。则(2000-1992)÷4=2……0,再4+2×2-0=8,年份代码计算结果为8,加上8月份的代码3,再加上日的代码27,由于是润年,因此还要加1,等于39。再除以七的余数是4,则这一天为星期四。93K鬼金羊

转换方法

许多人都一直在找换阴阳历的公式,高平子 所著《学历散论》解读了古历的变更和阴阳历的缺陷,才知道因为月球转动的不稳定不规则,确定无公式可寻。此亦为古时候中国每百年必改历的缘故。 93K鬼金羊

农历最大的问题是在怎样置闰。似乎不难,由于农历基本金科玉律如下:93K鬼金羊

月朔日其实就是初一93K鬼金羊

月以中气得名93K鬼金羊

以蕴含雨水中气月为正月,其实就是「寅」月93K鬼金羊

月无中气者为闰月,以前月同名。93K鬼金羊

假如,日月转动循还有规则的话, 推演一套阴阳历转换的公式并不难。问题在有时一个太阴月比一个太阳月还要长。如此一个太阴月就有可能包括两个中气。此双中气月后的农历月名就全部乱掉了,直到下一个「假」闰月后才调整过来。93K鬼金羊

普通人接触到的阴阳历是民用历法,它是 *** 颁令的的东边经120度计算的历法或称中原标准时间或北京时。假如,我们用不同时区、不同经度为子午线来重新计算阴阳历,民用历法的置闰金科玉律出了很大的问题。不同时区的闰月可能落在不同月。换言之,在一百年内,任何两个时区的闰月顺序模式是会不一样的。93K鬼金羊

高平子前辈书中提到了「历理置闰法」。假如套用历理置闰法到不同时区,则所有不同时区的闰月都落在相同月。如此不同时区、不同经度的阴阳历置闰之问题就消失了。民用置闰和历理置闰的区别是:93K鬼金羊

在民用置闰,假如月朔日和中气同一天,则该农历月蕴含那个中气。93K鬼金羊

在历理置闰,假如月朔日和中气同一天,月朔日时间必须在中气时间之前,则该农历月才蕴含那个中气。93K鬼金羊

简言之,民用置闰比较月朔和中气日期;历理置闰比较月朔和中气日期、时、分、秒。因此而知,没有精确的太阳和月亮的时间数字,农历的闰月也许会排错了。93K鬼金羊

基于这几个理由,我着手寻找天文公式计算精确的太阳和月亮在纬度的时间。当年没有网路,发了大半年于美国南加州各大图书馆及大学,找寻答案。1993年出版了「中美天文万年历」一书。书中精确的天文日月时间只从1900到2010年。因恐2011后时间误差超过一分钟,不够精确,不敢印出。2012从网路资讯,确定太阳和月亮时间的精确度后,百忙中重新整理资料,提供给需要阴阳历转换公式的friend。93K鬼金羊

整理出的太阳和月亮时间数字是从西元1年到2二十四6年。有历理和中国民用两套历法。数字内容清清楚楚的看出民用历法的敝端。例如,从西元1600年到2二十四6年,民用历法双中气的农历月有22个,历理历法只有5个。民用历法甚至在2033。2128和2二十四2年中,三个月之间竟然跑出两个双中气;换言之,三个月中多出两个「假」闰月。前后12个农历月中有三个闰月,闰月的去留造成很多学者的讨论和困恼。历理历法在此三年中,却没有发现到双中气农历月。闰月的去留只要把双中气月后的「假」闰月取消,则历理历法近乎于完美。93K鬼金羊

因此而知,民用历法问题很大,应该废除。上次阴阳历重大改历在1645年,已经超过350年。随着天文科学的进步,中国阴阳历可以使用较精确的历理历法。免得后代子孙再浪费时间讨论置闰去留的问题。93K鬼金羊

阴阳历套用在四柱算命、紫微斗数、农民历、遁甲历最多。许多人不晓得排八字只用阳历而不用农历。发了很多时间在研究阴阳历的转换。其实也就是说八字只使用太阳中节气,和月亮没有任何关系。紫微斗数则需要农历日期去排命盘。美国时区的农历日期有一半和中国时区的农历日期差一天,由于时差超过12小时;初一就可可以在不同日之故。有位在加拿大职业算命的friend,精通八字和紫微斗数,研究其女命盘。八字论爸妈,合情合理。斗数爸妈宫,看不出自己影子。之后的日子,在中美天文万年历一书发现了「差一天」之解答。93K鬼金羊

曾有一位退休博士用了近三十年找寻阴阳历的公式,问遍两岸各大天文台,不能得到答案,直到发现中美天文万年历一书。最后,希望我重新整理的中国阴阳历的天文数字和原始程式,能给有求知欲于阴阳历转换方法的读友一个答案,以免不能得到答案而遗憾终身。93K鬼金羊

中国阴阳历的天文数字和原始程式用简单英文阐述,93K鬼金羊

高平子 Kao Ping Tse"1888-1970〔是中国近代最有功名的天文学者之一。他没有接受正规的天文教导。凭著对天文的酷爱,自己研读天文书籍。由于他对天文的贡献,在他的百年冥诞,月球的一个环形月坑以他之名字为名。位置在月球东经87、6度,南纬6、7度, 直径34公里,为国争光。93K鬼金羊

干支年历歌诀

辛巳乙亥初九马前六金蝉龙猴打93K鬼金羊

壬午黄猪十九鸡二五九月十一七93K鬼金羊

癸未甲午当天鼠正三八十腊月五93K鬼金羊

甲申戊子十二卯前四二五猴猪咬93K鬼金羊

万年历

乙酉癸丑廿二午正二四五猴与鼠93K鬼金羊

丙戌丁未初三鸡二三五六八鼠息93K鬼金羊

丁女辛丑十四夜后二三五六八亥93K鬼金羊

戊子乙丑廿六卯玉兰七九子上找93K鬼金羊

已丑黄羊初七马二五九鼠七月俩93K鬼金羊

庚寅癸未十八酉正四七八猪与牛93K鬼金羊

辛卯丁丑廿八夜二五七九与子月93K鬼金羊

壬辰黑猴初十虎正三六九子前五93K鬼金羊

癸巳丙申廿一蛇正三四七十腊查93K鬼金羊

甲午庚寅初二申二四五七十月真93K鬼金羊

乙未青鸡十二亥火局前三七蛇在93K鬼金羊

丙申己酉廿四虎正三五六八与猪93K鬼金羊

丁酉癸卯初五蛇玉兰后八七十腊93K鬼金羊

戊戌丙寅十六申四六七九子月真93K鬼金羊

己亥辛酉廿七猪正四六月金蝉出93K鬼金羊

庚子乙卯初九虎二四后六金蝉舞93K鬼金羊

辛丑己卯十九蛇二四六九子鼠爬93K鬼金羊

壬寅甲戌三十申正三四六九腊真93K鬼金羊

癸卯戊辰十一亥玉兰后四鸡牛在93K鬼金羊

甲辰黑龙廿二虎二四七九再加五93K鬼金羊

乙巳丁亥初三辰正月五八季月临93K鬼金羊

丙午庚辰十五羊后三五八九牛羊93K鬼金羊

丁未青龙廿五狗三六七九子上走93K鬼金羊

戊申己亥初七丑正三六子后七九93K鬼金羊

已酉癸亥十八辰金蝉三五还有寅93K鬼金羊

万年历

庚戌丁巳廿八未二三五八子月对93K鬼金羊

辛女壬子初九戌水局正四后五居93K鬼金羊

壬子红鼠廿一卯正三四六八子小93K鬼金羊

癸丑庚午初二辰二四五七八子真93K鬼金羊

甲寅甲子十三羊后四五八水93K鬼金羊

乙卯戊子廿四酉三五六八十一九93K鬼金羊

丙辰壬午初六鼠五九后八水局主93K鬼金羊

丁巳丙午十七卯二五七九子丑找93K鬼金羊

戊午庚子廿七马二五八十腊月查93K鬼金羊

已未木羊初八酉(闰六)二三五七十与丑93K鬼金羊

庚申己未十九鼠二月三月七十五93K鬼金羊

辛酉甲寅三十兔正三四六猴与猪93K鬼金羊

壬戌戊申十一马玉兰后四七九查93K鬼金羊

癸亥壬申廿二酉二四五七亥猪走93K鬼金羊

甲子丙寅初三夜二五六八九后十93K鬼金羊

乙丑庚寅一五卯正四六八狗鼠跑93K鬼金羊

丙寅甲申廿六午正四七九牛与鼠93K鬼金羊

万年历

丁卯戊寅初七猴二四后六九子丑93K鬼金羊

戊辰壬寅十七亥九月玉兰丑牛在93K鬼金羊

已巳丁酉廿八寅二三五七九月真93K鬼金羊

庚午壬辰初九蛇正三四六后五八93K鬼金羊

辛未丙辰二十。申正三四六七九真93K鬼金羊

壬申庚戌当天亥正四五七鸡猪来93K鬼金羊

癸酉甲辰十三虎金蝉后三正七五93K鬼金羊

甲戌丁卯廿四蛇四六八九子月查93K鬼金羊

乙亥壬戌初五猴正四子六后八九93K鬼金羊

丙子红狗十六亥正三六八鼠牛在93K鬼金羊

丁丑庚辰廿七虎二四六九丑牛犊93K鬼金羊

戊寅乙亥初八辰二三双五鸡鼠奔93K鬼金羊

己卯黄猪十九未二三五六八丑对93K鬼金羊

庚辰癸巳廿九狗三四六七九93K鬼金羊

93K鬼金羊

93K鬼金羊

标签: