万年历(函数版)

合集下载

万年历

万年历

#include <stdio.h>#include <stdlib.h>#include <windows.h> //包含调用时同时间函数的头函数#include <math.h>int leap(int y);//判断是否为闰年int md(int m,int y);//返回本月的天数int fw(int m,int y);//返回本月一号是星期几void prtweekEx(int left, int right);//年历输出星期表头void prtmonthEx(int m);//输出月份表头void prtday(int left, int right, int year);void head(int y);//年份表头输出int count_leap(long year); //有关年份的计算int monthdays(int month,long year);void monthprint(long year,int month);void nowmonthprint(long year,int month);void years(); //年历输出void months(); //月历输出void screen(); //界面输出提示void timenow(); //此刻时间输出int judge();void holidayjudge(int yue,int i); //节日判断extern char filename[256]={0};extern char mname[256]={0};struct holiday{char mon[32];char day[32];char ho[32];}holi[20];int main(int argc, char* argv[]){timenow();screen();return 0;}int leap(int y) //判断闰年{return (y%4==0&&y%100||y%400==0)?1:0;}int md(int m,int y) //返回本月的天数{int d;{case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 4:case 6:case 9:case 11:d=30;break;case 2:d=leap(y)?29:28;break;}return d;}void prtweekEx(int left, int right) //年历输出星期表头{FILE *fp;fp=fopen(filename,"a+");printf("*********************************\t");fprintf(fp,"**************************** *****\t");printf("*********************************\n");fprintf(fp,"**************************** *****\n");printf("Sun Mon Tue Wed Thu Fri Sat\t");fprintf(fp,"Sun Mon Tue Wed Thu Fri Sat\t");printf("Sun Mon Tue Wed Thu Fri Sat\n");fprintf(fp,"Sun Mon Tue Wed Thu Fri Sat\n");fclose(fp);}int fw(int m,int y) //返回本月一号是星期几{int f;if (m<3){m+=12;y--;}return f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;;}void prtmonthEx(int m) //年历输出月份名称{FILE *fp;fp=fopen(filename,"a+");{case 1:printf(" Jan");fprintf(fp," Jan");break; case 3:printf(" Mar");fprintf(fp," Mar");break; case 5:printf(" May");fprintf(fp," May");break; case 7:printf(" Jul");fprintf(fp," Jul");break; case 9:printf(" Sep");fprintf(fp," Sep");break; case 11:printf(" Nov");fprintf(fp," Nov");break; }printf("\t\t\t\t");fprintf(fp,"\t\t\t\t");switch (m+1) {case 2:printf(" Feb");fprintf(fp," Feb");break;case 4:printf(" Apr");fprintf(fp," Apr");break;case 6:printf(" Jun");fprintf(fp," Jun");break;case 8:printf(" Aug");fprintf(fp," Aug");break;case 10:printf(" Oct");fprintf(fp," Oct");break;case 12:printf(" Dec");fprintf(fp," Dec");break;}printf("\n"); fprintf(fp,"\n");fclose(fp);}void prtday(int left, int right, int year) //年历输出日期{int i;int dayshow_left = 0;int dayshow_right = 0;int first_left = fw(left, year)+1;int first_right = fw(right, year)+1;FILE *fp;fp=fopen(filename,"a+");judge();If(fw(left, year)+1==7)first_left=0;for(i=0; i<first_left; i++) //输出第1行左列{printf(" ");fprintf(fp," ");}for(i=0; i<7-first_left; i++){holidayjudge(left,i);dayshow_left++;}printf("\t");fprintf(fp,"\t");If(fw(right, year)+1==7)first_right=0;for(i=0; i<first_right; i++) //输出第1行右列{printf(" ");fprintf(fp," ");}for(i=0; i<7-first_right; i++){holidayjudge(right,i);dayshow_right++;}printf("\n");fprintf(fp,"\n");for(i=0; i<4; i++) //接下来连续的4行{int j;for(j=0; j<7; j++) //输出第2、3、4、5行左列{if(dayshow_left >= md(left, year)){printf(" ");fprintf(fp," ");}else{if(10 > ++dayshow_left){printf("%d ", dayshow_left);fprintf(fp,"%d ", dayshow_left);}else{printf("%d ", dayshow_left);fprintf(fp,"%d ", dayshow_left);}}}printf("\t");fprintf(fp,"\t");for(j=0; j<7; j++) //输出第2、3、4、5行右列{if(dayshow_right >= md(right, year)){break;}if(10 > ++dayshow_right){printf("%d ", dayshow_right);fprintf(fp,"%d ", dayshow_right); }else{printf("%d ", dayshow_right);fprintf(fp,"%d ", dayshow_right);}}printf("\n");fprintf(fp,"\n");}int lastline_left = md(left, year)-dayshow_left; //如果有第6行左列,输出第6行左列if(1 <= lastline_left){for(i=0; i<lastline_left; i++){printf("%d ", ++dayshow_left);fprintf(fp,"%d ", ++dayshow_left);}for(i=0; i<7-lastline_left; i++){printf(" ");fprintf(fp," ");}}else{for(i=0; i<7; i++){printf(" ");fprintf(fp," ");}}printf("\t");fprintf(fp,"\t");int lastline_right = md(right, year)-dayshow_right; //如果有第6行右列,输出第6行右列if(1 <= lastline_right)for(i=0; i<lastline_right; i++){printf("%d ", ++dayshow_right);fprintf(fp,"%d ", ++dayshow_right);}printf("\n");fprintf(fp,"\n");fclose(fp);}void head(int y) //年份表头输出{ if(y>9999||y<0){printf("超出范围,请重新输入\n");screen();}FILE *fp;fp=fopen(filename,"a+");char s[10][5][6]={{"*****","* *","* *","* *","*****"},{" *"," *"," *"," *"," *"},{"*****"," *","*****","* ","*****"},{"*****"," *","*****"," *","*****"},{"* *","* *","*****"," *"," *"},{"*****","* ","*****"," *","*****"},{"*****","*","*****","* *","*****"},{"*****"," *"," *"," *"," *"},{"*****","* *","*****","* *","*****"},{"*****","* *","*****"," *","*****"}};int x[4],i,j;x[3]=y%10;x[2]=y%100/10;x[1]=y%1000/100;x[0]=y/1000;for(i=0;i<5;i++){printf("\t\t");fprintf(fp,"\t\t");for(j=0;j<4;j++){printf("\t");fprintf(fp,"\t");printf("%s",s[x[j]][i]);fprintf(fp,"%s",s[x[j]][i]);}printf("\n");fprintf(fp,"\n");}fclose(fp);}void years() //年历的输出{int m,i,k,y,d;char a[20];do{printf("Year(0~9999) :");for(i=0;i<20&&a[i-1]!=10;i++)scanf("%c",&a[i]);if(i-1>4){printf("error input!\n");printf("Year(0~9999) :");for(i=0;i<20&&a[i-1]!=10;i++)scanf("%c",&a[i]);}for(k=0,y=0;k<i-1;k++){if(a[k]<58&&a[k]>47)y+=(a[k]-48)*pow(10,i-k-2);else{printf("error input!\n");break;}}}while(a[k]!=10&&(a[k]>58||a[k]<47));sprintf(filename,"D:\\year\\%d.txt",y);printf("%s\n****\n",filename);FILE *fp;fp=fopen(filename,"w");if(!fp){printf("file cannot be opened");exit(1);}head(y);for(m=1; m<=12; m+=2){prtmonthEx(m);prtweekEx(1, 2);prtday(m, m+1, y);}while(1){printf("回到主菜单请按0\n查看上一年年历请按1\n查看下一年年历请按2\n"); scanf("%d",&d);switch(d){case 0:screen();break;for(m=1; m<=12; m+=2)case 1:head(y=y-1);for(m=1; m<=12; m+=2){prtmonthEx(m);prtweekEx(1, 2);prtday(m, m+1, y-1);}break;case 2:head(y=y+1);for(m=1; m<=12; m+=2){prtmonthEx(m);prtweekEx(1, 2);prtday(m, m+1,y+1);}break;default:{printf("error input!\n");screen();};}}}void months() //月历的输出{char m[10], y[10],choose;int i,k,year,month,p,q,l;do{p=q=l=0;printf("Year Month(请按规定格式输入):");for(i=0;i<10&&y[i-1]!=10&&y[i-1]!=32;i++)scanf("%c",&y[i]);for(k=0,year=0;k<i-1;k++){if(y[k]<58&&y[k]>47)year+=(y[k]-48)*pow(10,i-k-2);else{printf("year error input!\n\n");p=1;break;}}for(i=0;i<10&&m[i-1]!=10;i++)scanf("%c",&m[i]);for(k=0,month=0;k<i-1;k++){if(m[k]<58&&m[k]>47)month+=(m[k]-48)*pow(10,i-k-2);else{printf("month error input!\n\n");q=1;break;}}if(i-1>3||month>12){ printf("month error input!\n\n");l=1;}}while(p||q||l);sprintf(mname,"D:\\year_month\\%d_%d.txt",year,month);printf("%s\n****\n",mname);FILE *fq;fq=fopen(mname,"w");if(!fq){printf("file cannot be opened");exit(1);}printf("\t\t\t\t%ld\t%d\n\n",year,month);fprintf(fq,"\t\t\t\t%ld\t%d\n\n",year,month);printf("\n**************************************************************************** ****\n");fprintf(fq,"\n************************************************************************** ******\n");printf("\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");fprintf(fq,"\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");fclose(fq);monthprint(year,month);printf("\n\n");printf("Continue?(y/n):\n\n");scanf("%c",&choose);getchar();if(choose=='y'||choose=='Y') months();else screen();}int count_leap(long year){int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap(j)) i++;return i;}int monthdays(int month,long year){int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};j=month-1;if(leap(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31};j=12-month;if(leap(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(long year,int month){static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;FILE *fq;fq=fopen(mname,"a+");if(leap(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<=weekday+2;i++){printf ("\t");fprintf (fq,"\t");}for (i=1;i<=y;i++){if ((i+weekday-1)%7==0){printf ("\n\n\t\t%3d\t",i);fprintf(fq,"\n\n\t\t%3d\t",i);}else{printf ("%3d\t",i);fprintf (fq,"%3d\t",i);}}printf("\n*********************************************************************** *********\n\n");fprintf(fq,"\n******************************************************************** ************\n\n");fclose(fq);}void timenow(){int month=9;long year=2010;SYSTEMTIME systime;GetLocalTime(&systime);printf("\t\t\t\t%ld\t%d\n\n",systime.wYear,systime.wMonth);printf("\n*********************************************************************** *********\n");printf("\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");nowmonthprint(year,month);printf(" 今天是:%d年%d月%d日星期%d\n",systime.wYear,systime.wMonth,systime.wDay,systime.wDayOfWeek);printf(" 当前时间:%d时%d分%d秒\n\n\n",systime.wHour,systime.wMinute,systime.wSecond);}void screen(){int date;printf("查询月历请选1\n查询年历请选2\n");scanf("%d",&date);getchar();switch (date){case 1:months();break;case 2:years();break;default:{printf("请重新输入\n");screen();};}}void nowmonthprint(long year,int month){int i,weekday=3;long days=30;for (i=1;i<=weekday+2;i++)printf ("\t");for (i=1;i<=30;i++){if ((i+weekday-1)%7==0) printf ("\n\n\t\t%3d\t",i);else printf ("%3d\t",i);};printf("\n**************************************************************************** ****\n");}int judge() //判断是否输出节日{ int i=0;FILE *fs; //读holiday文件用的指针fs=fopen("D:\\holiday.txt","r+");if(!fs) //如果文件指针为空,报错{printf("无法打开文件!\n");return 0;}while(fscanf(fs,"%s",holi[i].mon)!=-1){fscanf(fs,"%s",holi[i].day);fscanf(fs,"%s",holi[i].ho);i++;}fclose(fs);return 0;}void holidayjudge(int yue,int i){int mont,da,j;FILE *fp;fp=fopen(filename,"a+");for(j=0;j<12;j++){if(holi[j].mon[1]==0)mont=holi[j].mon[0]-48;elsemont=(holi[j].mon[0]-48)*10+(holi[j].mon[1]-48);//mont为holi[j].mon转化的整形if(holi[j].day[1]==0)da=holi[j].day[0]-48; //da为holi[j].day转化的整形elseda=(holi[j].day[0]-48)*10+holi[j].day[1];if(yue==mont){if(i+1==da){printf("%d%s",i+1,holi[j].ho);fprintf(fp,"%d%s",i+1,holi[j].ho);}else{printf("%d ", i+1);fprintf(fp,"%d ", i+1);}}}fclose(fp);}。

C语言万年历代码

C语言万年历代码

屌神NO.1#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include <conio.h> /清屏函数的头文件*/#define X " Sun Mon Tue Wed Thu Fri Sat"void menu();int getday(int year,int month,int date);int isleap(int year);void print(int n);int day(int year);void printcalendar(int year);void menu(){system("cls"); /*清除屏幕上所有文字*/printf("\nTHIS IS THE MENU OF THE PROGRAM !");printf("\nYOU CAN CHOOSE THE NUMBER FOR THE FUNCTIOM:");printf("\n\n");printf("1 Find the day by year-month-date.\n");printf("2 Find out whether the year you input is a leap year.\n");printf("3 Print the calendar of the year you input.\n");printf("4 Exit.\n\n");printf("Input your choice:");}/*函数定义,将在主函数中调用*/int getday(int year,int month,int date){int isleap(int year);int flag,s,i;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int cont=0;flag=isleap(year);if(flag==1){a[2]++; /*修改二月份天数*/}for(i=1;i<month;i++){cont=cont+a[i];}cont=cont+date;s=year+1+(year-1)/4+(year-1)/100+(year-1)/400+cont;return s%7;}/*利用公式求星期几*/int isleap(int year){if(year%4==0&&year%100||year%400==0){return 1;}else{return 0;}}/*判定闰年*/void print(int n){int i;for(i=0;i<n;i++) printf(" ");}/*打印空格,排版使用*/int day(int year){long a,b;if(year<=2000){a=2000-year;b=6-(a+a/4-a/100+a/400)%7;return b;}else{a=year-2000;b=(a+1+(a-1)/4-(a-1)/100+(a-1)/400)%7+6;return b%7;}}/*打印日历函数*/void printcalendar(int year){int i,j,k,m,n,f1,f2,d;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("\nThe calendar of the year %d.\n\n",year);d=day(year);if(isleap(year)==1){a[2]++;}for(i=1;i<=12;i+=2){m=0; n=0; f1=0; f2=0;switch(i){case 1:printf(" Januray 1 ");break;case 3:printf(" March 3 ");break;case 5:printf(" May 5 ");break;case 7:printf(" July 7 "); break;case 9:printf(" September 9 ");break;case 11:printf(" Nevember 11 ");break;}print(21); /*打印空格,隔开奇偶月份名*/switch(i+1){case 2:printf(" February 2 "); break;case 4:printf(" April 4 "); break;case 6:printf(" June 6 "); break;case 8:printf(" August 8 "); break;case 10:printf(" October 10 "); break;case 12:printf(" December 12"); break;}printf("\n");printf(X); /*宏调用,打印星期字符串*/print(6); /*打印空格,隔开奇偶月份数据*/printf(X);printf("\n");for(j=0;j<6;j++){if(j==0){print(d*4); /*每个日期数采用个空格的宽度,即4字节。

可调时间的万年历(1302)

可调时间的万年历(1302)

#include<reg52.h> //1302写的时候最低位是0 读的时候最低位是1#define uint unsigned int //1302写的时候最低位是0 读的时候最低位是1#define uchar unsigned char //1302写的时候最低位是0 读的时候最低位是1uchar k1num,k2num,mod,flag=0,ri,yue,nian; //1302写的时候最低位是0 读的时候最低位是1char shi,fen,miao; //1302写的时候最低位是0 读的时候最低位是1uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit clk=P1^0;sbit io=P1^1;sbit rs=P1^2;sbit k5=P1^3;sbit k1=P1^4;sbit k2=P1^5;sbit k3=P1^6;sbit k4=P1^7;sbit led1=P3^4;sbit led2=P3^5;sbit led3=P3^6;sbit led4=P3^7;void delay(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}void play1() //显示时钟函数{P2=0xff;P2=0xfe;P0=tab[shi/16];delay(11);P2=0xff;P2=0xfd;P0=tab[shi%16];delay(11);P2=0xff;P2=0xfb;P0=0xbf;delay(11);P2=0xff;P2=0xf7;P0=tab[fen/16];delay(11);P2=0xff;P2=0xef;P0=tab[fen%16];delay(11);P2=0xff;P2=0xdf;P0=0xbf;delay(11);P2=0xff;P2=0xbf;P0=tab[miao/16];delay(11);P2=0xff;P2=0x7f;P0=tab[miao%16];delay(11);}void play2() //显示年月日函数{P2=0xff;P2=0xfe;P0=tab[nian/16];delay(11);P2=0xff;P2=0xfd;P0=tab[nian%16];delay(11);P2=0xff;P2=0xfb;P0=0xf7;delay(11);P2=0xff;P2=0xf7;P0=tab[yue/16];delay(11);P2=0xff;P2=0xef;P0=tab[yue%16];delay(11);P2=0xff;P2=0xdf;P0=0xf7;delay(11);P2=0xff;P2=0xbf;P0=tab[ri/16];delay(11);P2=0xff;P2=0x7f;P0=tab[ri%16];delay(11);}void write_1302(uchar add,uchar date) //在某一地址处写数据{uchar temp,i;temp=add; //将要操作的地址寄存器赋予临时变量temprs=0;clk=0;rs=1;for(i=0;i<8;i++) //一个字节为8位,分8次写入{clk=0;if(temp&0x01)//判断add的最低位是否为1,如果为一将数据线置高io=1;elseio=0;clk=1;delay(5);clk=0; //右移判断次低位temp>>=1;temp=date; //将要写的数据赋予临时变量tempfor(i=0;i<8;i++){clk=0;if(temp&0x01)io=1;elseio=0;clk=1;delay(5);clk=0;temp>>=1;}rs=0;clk=1;}uchar read_1302(uchar add) //读某地址的数据{uchar temp,i;temp=add;rs=0;clk=0;rs=1;for(i=0;i<8;i++){if(temp&0x01)io=1;elseio=0;clk=1;clk=0;temp>>=1;}temp=0;for(i=0;i<7;i++){if(io)temp|=0x80;elsetemp&=0x7f;clk=1;clk=0;temp>>=1;clk=1;rs=0;return temp;}void key() //模式{if(k2==0){delay(100);if(k2==0){while(!k2);k2num++;if(k2num==4){k2num=0;led1=1;led2=1;led3=1;}}}}void set_time() //设置时间时分秒和年月日的调整{if(flag==0){if(k2num==1){led1=1;led2=1;led3=0; //调秒钟指示的发光二极管if(k3==0){delay(100);if(k3==0) //秒钟加一{while(!k3);miao=((miao>>4)*10+(miao&0x0f));miao++;if(miao==60)miao=0;miao=(((miao/10)<<4)+((miao%10)&0x0f));write_1302(0x80,miao); //秒寄存器为0x80 }}if(k4==0) //秒钟减一{delay(100);if(k4==0){while(!k4);miao=((miao>>4)*10+(miao&0x0f));miao--;if(miao==-1)miao=59;miao=(((miao/10)<<4)+((miao%10)&0x0f));write_1302(0x80,miao); //秒寄存器为0x80 }}}if(k2num==2){led1=1;led2=0; //调分钟指示的发光二极管led3=1;if(k3==0){delay(100);if(k3==0) //分钟加一{while(!k3);fen=((fen>>4)*10+(fen&0x0f));fen++;if(fen==60)fen=0;fen=(((fen/10)<<4)+((fen%10)&0x0f));write_1302(0x82,fen); //分钟寄存器为0x82 }}if(k4==0) //分钟减一{delay(100);if(k4==0){while(!k4);fen=((fen>>4)*10+(fen&0x0f));fen--;if(fen==-1)fen=59;fen=(((fen/10)<<4)+((fen%10)&0x0f));write_1302(0x82,fen); //分钟寄存器为0x82 }}}if(k2num==3){led1=0; //调小时指示的发光二极管led2=1;led3=1;if(k3==0){delay(100);if(k3==0) //小时加一{while(!k3);shi=((shi>>4)*10+(shi&0x0f));shi++;if(shi==24)shi=0;shi=(((shi/10)<<4)+((shi%10)&0x0f));write_1302(0x84,shi); //小时寄存器为0x84 }}if(k4==0) //小时减一{delay(100);if(k4==0){while(!k4);shi=((shi>>4)*10+(shi&0x0f));shi--;if(shi==-1)shi=23;shi=(((shi/10)<<4)+((shi%10)&0x0f));write_1302(0x84,shi); //小时寄存器为0x84 }}}}if(flag==1){if(k2num==1){led1=1;led2=1;led3=0; //调日期指示的发光二极管if(k3==0){delay(100);if(k3==0) //日期加一{while(!k3);ri=((ri>>4)*10+(ri&0x0f));ri++;if(ri==32)ri=1;ri=(((ri/10)<<4)+((ri%10)&0x0f));write_1302(0x86,ri); //秒寄存器为0x86 }}if(k4==0) //日期减一{delay(100);if(k4==0){while(!k4);ri=((ri>>4)*10+(ri&0x0f));ri--;if(ri==0)ri=31;ri=(((ri/10)<<4)+((ri%10)&0x0f));write_1302(0x86,ri); //秒寄存器为0x86 }}}if(k2num==2){led1=1;led2=0; //调月份指示的发光二极管led3=1;if(k3==0){delay(100);if(k3==0) //月份加一{while(!k3);yue=((yue>>4)*10+(yue&0x0f));yue++;if(yue==13)yue=1;yue=(((yue/10)<<4)+((yue%10)&0x0f));write_1302(0x88,yue); //月份寄存器为0x88 }}if(k4==0) //月份减一{delay(100);if(k4==0){while(!k4);yue=((yue>>4)*10+(yue&0x0f));yue--;if(yue==0)yue=12;yue=(((yue/10)<<4)+((yue%10)&0x0f));write_1302(0x88,yue); //分钟寄存器为0x88 }}}if(k2num==3){led1=0; //调年份指示的发光二极管led2=1;led3=1;if(k3==0){delay(100);if(k3==0) //年份加一{while(!k3);nian=((nian>>4)*10+(nian&0x0f));nian++;if(nian==99)nian=0;nian=(((nian/10)<<4)+((nian%10)&0x0f));write_1302(0x8c,nian); //年份寄存器为0x8c}}if(k4==0) //年份减一{delay(100);if(k4==0){while(!k4);nian=((nian>>4)*10+(nian&0x0f));nian--;if(nian==0)nian=99;nian=(((nian/10)<<4)+((nian%10)&0x0f));write_1302(0x8c,nian); //年份寄存器为0x8c}}}}}/*void write_time()//初始化时间 //写时间时寄存器最低位是0 {write_1302(0x80,0x40);//second 秒时间在1302write_1302(0x82,0x49);//minute 分钟内部为16进制数write_1302(0x84,0x13);//hour 小时write_1302(0x86,0x15);//date 日write_1302(0x88,0x10);//month 月write_1302(0x8c,0x10);//year 年} */void read_time(){shi=read_1302(0x85); //读时间寄存器时最低位是1 fen=read_1302(0x83);miao=read_1302(0x81);nian=read_1302(0x8d);yue=read_1302(0x89);ri=read_1302(0x87);}void main(){// write_time();while(1){if(k1==0){delay(100);if(k1==0){while(!k1);flag=1;k1num++;if(k1num==2)k1num=0;}}if(k1num==0)play1();if(k1num==1)play2();key();set_time();read_time();}}。

C++程序设计(万年历——说明书)

C++程序设计(万年历——说明书)

C++程序设计说明书题目:万年历班级学号:学生姓名:目录一.应用程序的名称二.应用程序的主题、设计目的三.应用程序简介1.程序的基本结构及内容2。

程序的运行环境四.主要运行界面的介绍五.程序亮点六.课程设计中存在的问题及解决方法一.课程设计名称万年历二.应用程序要求、目的主题:万年历目的:实现对年月的查询三.应用程序简介(1)基本结构:整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。

在主函数中运用while 语言与switch语句的嵌套,是程序拥有了循环的功能.用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。

万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。

所以会改变day_of_month[]数组中的二月份的数值。

二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。

而对于判断周几,需要运用公式:w=(y+[y/4]+[c/4]—2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。

通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码.(2)源程序代码:#include〈stdio.h>#include 〈string。

h〉#include 〈time.h>#include <math。

h〉#include 〈windows。

万年历算法分析

万年历算法分析

万年历算法一、阳历算法具体算法见函数Void get_solar_day_date(void),这样阳历日历的星期排法就确定了。

表1:月份 1 2 3 4 5 6 7 8 9 10 11 12闰年 31 29 31 30 31 30 31 31 30 31 30 31非闰年 31 28 31 30 31 30 31 31 30 31 30 31变量定义:Public:Unsigned int temp_total_day;Unsigned char gc_solar_calendar_year;Unsigned char gc_solar_calendar_month;Unsigned char gc_solar_calendar_date;Unsigned char gc_lunar_calendar_year;Unsigned char gc_lunar_calendar_month;Unsigned char gc_lunar_calendar_date;Unsigned char start_day_of_week;说明:函数get_solar_day_date(void)的输入变量:gc_solar_calendar_year和gc_solar_calendar_month 输出变量:start_day_of_week和temp_total_dayVoid get_solar_day_date(void){unsigned char temp01;/*------calculate what day is the day of the current month and year. Mon~Sun?---*//*条件初始化二次,减少运算数据量. temp_total_day 是int型变量*/start_day_of_week = 2; temp_total_day = 0;calculate_temp = 1;if(gc_solar_calendar_year > 99){start_day_of_week = 6;calculate_temp = 100;}for(temp01 = calculate_temp; temp01<gc_solar_calendar_year; temp01++){ if(temp01%4 == 0){start_day_of_week +=2;temp_total_day += 366; }else {start_day_of_week +=1;temp_total_day += 365;}}for(temp01 = 1;temp01<gc_solar_calendar_month;temp01++){ switch(temp01){case 1,3,5,7,8,10,12: start_day_of_week +=3;temp_total_day +=31;break;case 2: if(((gc_solar_calendar_year%4) == 0)&&(gc_solar_calendar_year != 200)){start_day_of_week +=1; temp_total_day +=29;}else {start_day_of_week +=0;temp_total_day +=28;} break;case 4,6,9,11: start_day_of_week +=2; temp_total_day +=30; break;}}start_day_of_week %=7;/*-end of calculate what day is the day(Mon~Sun?) and total day --*/}二、阴历算法200年需要200 × 2 = 400个字节,构成阴历压缩数据表lunar_calendar_month_table[]如下:const char lunar_calendar_month_table[]={ //从阴历年1900年到2100年/*the total day of each month pointer *//* from 1901~2100*//* (0110)110000001001 (0110)leap month,110000001001lunar month total day: 1:29 0:30*/0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05,0x59,0x45, 0x95,0x0a,0xa6,0x04,0 x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04,0xb4,0x05, 0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x 56,0x02,0x6d,0x71,0x6d,0x01, 0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09,0x5 6,0x01, 0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56,0xa5,0x04, 0x2b,0x09,0x9 e,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,0 x04,0xda,0x04,0xd4,0x44,0xb4,0x05,0x54,0x85, 0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x 02,0x6a,0x41,0xda,0x02, 0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01,0xad,0x5 0, 0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c,0x2a,0x09, 0x96,0x54,0xb6,0x0 8,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,0 xf4,0x62,0xb4,0x05,0x54,0x0b,0x44,0x5d, 0x52,0x0a,0x95,0x04,0x55,0x22,0x6d,0x02,0x5a,0x71,0x da,0x02,0xaa,0x05, 0xb2,0x55,0x49,0x0b,0x4a,0x0a,0x2d,0x39,0x36,0x01,0x6d,0x80,0x6d,0x01, 0x d9,0x02,0xe9,0x6a,0xa8,0x05,0x29,0x0b,0x9a,0x4c,0xaa,0x08,0xb6,0x08, 0xb4,0x38,0x6c,0x09,0x5 4,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,0 x25,0x54,0x03,};确定阳历日和阴历日的对应关系的算法:对于其他任何一个阳历日和阴历日的对应关系,都可以通过以下算法求得结果。

C语言万年历代码

C语言万年历代码

else if(ch=='n'||ch=='N')
{ month+=1;
if(month>12) {month=1;year+=1;}
}
printf("\t\t********e退出 p上一月 n下一月********");
}
void first_set(int *year,int *month)
{ do{
printf ("please input the year(1~9999):");
if (choose=='y'||choose=='Y') main();
}
days_of_month(int x,int y)
{
int z;
switch (y)
{case 1:
case 3:
case 5:
case 7:
case 8:
printf ("please input the month(1~12):");
scanf ("%d",month);
if(*month<1||*month>12) printf ("WANNING:ERROR,please input again!\n");
printf ("\n\n********************************************************************************\n\n");
自己做的日历(C语言)
本帖最后由 kekeyu 于 2010-8-15 16:59 编辑

用EXCEL制作一份万年历

用EXCEL制作一份万年历

用EXCEL制作一份万年历今天我们介绍用Excel制作万年历的方法。

这个万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。

如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧!本文所涉及到的函数有:1、(logical1,logical2, ...)2、3、4、5、6、7、8、1、启动EXCEL2003,新建一个工作表,取名保存(如万年历.xls),并在相应的单元格中,输入如图1所示的文本。

2、同时选中B1、C1、D1单元格,按“格式”工具栏上的“合并及居中”按钮,将其合并成一个单元格,并输入公式:=TODAY()。

选中B1(合并后的)单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图2),在“数字”标签中的“分类”下面选中“日期”选项,再在右侧“类型”下面选中“二○○一年三月十四日”选项,“确定”退出,将日期设置成中文形式。

注意:TODAY()函数用于提取当前系统日期,请将系统日期一定要调整准确哟。

3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2)=7,"日",WEEKDAY(B1,2));选中H1单元格,输入公式:=NOW()。

选中F1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“特殊”选项,再在右侧“类型”下面选中“中文小写数字”选项,“确定”退出,将“星期数”设置成中文小写形式;选中H1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“时间”选项,再在右侧“类型”下面选中一款时间格式,“确定”退出。

注意:①上述前面一个公式的含义是:如果(IF)当前日期(B1)是星期“7”(WEEKDAY(B1,2)=7),则在F1单元格中显示“日”,否则,直接显示出星期的数值(WEEKDAY(B1,2))。

②上述第二个函数(NOW())用于提取当前系统日期和时间,也请将系统日期和时间调整准确。

万年历代码

万年历代码
int x,y;
for(x = -1;x < Width;x += 3)
for(y = 1;y < Length;y++)
mvprintw(x,y,"-");
for(x = 3;x < Width;x++)
for(y = 1;y < Length;y += 11)
mvprintw(x,y,"|");
int Pre_Year = 0, Pre_Month = 0, Pre_Day =0;//初始化当前日期
int OutputCalendar(int year,int month);//输出万年历
int QueryDate(int *year, int *month);//查询日期
int Leap_Year(int year);//判断闰年 TRUE or FALSE
Pre_Year = 1900 + p -> tm_year;
Pre_Month = 1 + p -> tm_mon;
Pre_Day = p -> tm_mday;
}
//输出万年历
int OutputCalendar(int year, int month)
{
clear();
attron(COLOR_PAIR(4)|A_BOLD);
Month_last = month - 1;
if(Month_last <= 0)
{
Month_last = 12;
Year_last = year - 1;
}
if(Month_last == 2 && Leap_Year(Year_last))//若上年为闰年

手把手教你用EXCEL制作日历

手把手教你用EXCEL制作日历

今天我们介绍用Excel制作万年历的方法。

这个万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。

如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧!本文所涉及到的函数有:1、AND (logical1,logical2, ...)2、DATE (year,month,day)3、DAY (serial_number)4、IF (Logical,Value_if_true,Value_if_false)5、INT (number)6、MONTH (serial_number)7、NOW ()8、OR (logical1,logical2, ...)1、启动EXCEL2003,新建一个工作表,取名保存(如万年历.xls),并在相应的单元格中,输入如图1所示的文本。

2、同时选中B1、C1、D1单元格,按“格式”工具栏上的“合并及居中”按钮,将其合并成一个单元格,并输入公式:=TODAY()。

选中B1(合并后的)单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图2),在“数字”标签中的“分类”下面选中“日期”选项,再在右侧“类型”下面选中“二○○一年三月十四日”选项,“确定”退出,将日期设置成中文形式。

注意:TODAY()函数用于提取当前系统日期,请将系统日期一定要调整准确哟。

3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2)=7,"日",WEEKDAY(B1,2));选中H1单元格,输入公式:=NOW()。

选中F1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“特殊”选项,再在右侧“类型”下面选中“中文小写数字”选项,“确定”退出,将“星期数”设置成中文小写形式;选中H1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“时间”选项,再在右侧“类型”下面选中一款时间格式,“确定”退出。

Excel公式和函数 典型案例—万年历

Excel公式和函数  典型案例—万年历

Excel公式和函数典型案例—万年历万年历只是一种象征,表示时间跨度大,即记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历,从而方便用户查询使用。

本例通过日期和时间函数,可以显示当月的日期,还可以随意查阅任何日期所属的日期。

1.练习要点●日期和时间函数●数据有效性●应用艺术字2.操作步骤:在制作本例的过程中,由于步骤比较繁杂,所以从制作过程和美化过程考虑,可以将其划分为两大部分。

第一部分:制作万年历(1)新建一张空白工作表,插入一个“填充-强调文字颜色2,暖色粗糙棱台”样式的艺术字。

然后更改艺术字文字为“万年历”,效果如图3-62所示。

图3-62 插入艺术字提 示 选择【插入】选项卡,单击【文本】组中的【艺术字】下拉按钮,选择合适的艺术字选项,即可插入艺术字。

(2)选择插入的艺术字,在【字体】组中,设置【字体】为“隶书”;【字体颜色】为“黄色”,如图3-63所示。

图3-63 设置字体(3)在工作表中,输入相应的数据信息,如图3-64所示。

图3-64 输入数据信息(4)选择D8单元格,输入“=TODAY()”公式,计算系统当前日期。

然后,合并D8至F8单元格区域,如图3-65所示。

图3-65 计算系统日期插入艺术字选择输入效果设置输入单击(5)选择B8单元格,在【设置单元格格式】对话框中,选择【分类】栏中的【日期】选项,并在【类型】列表中,选择合适的日期格式,如图3-65所示。

图3-65 设置单元格格式提 示 单击【数字】组中的【对话框启动器】按钮,即可弹出【设置单元格格式】对话框。

(6)选择H8单元格,输入“=IF(WEEKDAY(D8,2)=7,"日",WEEKDAY(D8,2))”公式,即可求出为一星期的第几天,效果如图3-66所示。

图3-66 计算星期数(7)选择H8单元格,并在【设置单元格格式】对话框中,选择【分类】栏中的【特殊】项,并选择【类型】栏中的【中文小写数字】项,如图3-67所示。

C++实现万年历(原创)

C++实现万年历(原创)

C++实现万年历(原创)任务要求功能要求:(1)提供菜单⽅式选择,假定输⼊的年份在1940-2040年之间。

(2)输⼊⼀个年份,输出是在屏幕上显⽰该年的⽇历。

(3)输⼊年⽉,输出该⽉的⽇历,如图2-1所⽰: 图2- 1 ⽉⽇历(4)输⼊年份、⽉份、⽇期,计算得到的是这⼀天据今天有多少天,星期⼏。

(5)输⼊公历的年⽉⽇,输出农历年⽉⽇。

(6)输⼊农历节⽓,输出当年农历的年⽉⽇及公历年⽉⽇。

可以假定只涉及年份是1940年到2040年。

总体设计将⽂件三部分 Date.h、main.cpp、Date.cpp1) Date.h:包括函数的声明。

2) main.cpp:包含调⽤与模拟交互界⾯的函数代码3) Date.cpp://输⼊输⼊⼀个年份,输出是在屏幕上显⽰该年的⽇历。

void print_annual_calendar(int year)//输⼊年⽉,输出该⽉的⽇历。

void print_monthly_calendar(int year,int month)//输⼊年份、⽉份、⽇期,计算得到的是这⼀天据今天有多少天,星期⼏。

void print_number_week(int year,int month ,int day)//输⼊公历,显⽰农历。

void gregorian_to_lunar (int year,int month,int day)//输⼊农历节⽓,输出当年农历的年⽉⽇和公历年⽉⽇。

void solar_term(char *str)详细设计说明(1) 查询距今多少天,星期⼏?①计算某⼀⽇期到1939年1⽉1⽇的天数:getDaysTo1939(int year, int month, int day)1. 判断是否是闰年(平年365天,闰年366天),函数如表4-1所⽰:表4- 1 isLeapYear函数定义函数bool isLeapYear(int year)返回值若year年是闰年返回true,否则返回false参数说明year参数是要判断的年份1. 判断某年某⽉有多少天?函数如表4-2所⽰:表4- 2 getDaysOfMonth函数定义函数int getDaysOfMonth(int year,int month)返回值返回year年month⽉的天数参数说明year、month参数分别是要查询的年、⽉例如:计算2020年8⽉14⽇到1939年1⽉1⽇的天数。

用Excel制作万年历

用Excel制作万年历

我们 选 中 D1 ( F1 或 5 5)单 元格 时, 在 单元 格 右侧 出现 一 个 下拉 按 钮 ,按 此 下拉 按 钮 , 即可 选 择 年份 ( 月 份 ) 数 值 , 调 整 “ 询 年 月 ”。 或 查
5. 选 中 A 2单 元 格 , 输 入 公 式 : =I F1 = , F( 2 3 I( F OR( / 0 = NT( / 0 ) D1 4 0 I 3 D1 4 0 , 3 AND( / = NT D1 4 I 3 ( 1/ ) 3 0 < I D 3 4, /1 0 > NT( 3 0 )) 92 ) F( D1 D1 /10 ), ,8 , OR 2 I ( 3 4F1 = , 3 9F1 =1 ) 03 ), 用 于 获 取 查 F1 = , 3 6F1 = , 3 1, ,1) 3
“ 型 ” 下 面 选 中 “ 7 年 3 月 4 日 ” 选 项 , “ 类 1 99 确 定 ” 退 出 , 将 日 期 设 置 成 中 文 书 写 形 式 。 这 里 的 TODAY ( 函 数 用 于 提 取 当 前 系 统 日期 , 因 此 需 )
4. 选 中 D 1 3单 元 格 , 执 行 “ 据 I 效 性 ” 数 有
中 H 1单 元 格 , 输 入 公 式 :=N O W () 。再 次 选 中 F 1 单 元 格 , 打 开 “ 元 格 格 式 ” 对 话 框 , 在 单
“ 字 ” 标 签 中 的 “ 类 ” 下 面 选 中 “ 殊 ” 选 数 分 特
¥ ¥1 ¥ ¥1 J :J 2”序 列 。经 过 这样 的设 置 以后 , 当
元 格 中 输 入 1~1 份序列。 2月
本 。 同 时 选 中
B 1、 C 1、 D 1

Excel制作万年历方法(一看就会)

Excel制作万年历方法(一看就会)

按CTRL,点击我我们将一步一步教您怎么制作EXCEL万年历!Office 2007是微软Office产品史上最具创新与革命性的一个版本。

全新设计的用户界面、稳定安全的文件格式、无缝高效的沟通协作。

Excel是Office套件中的一个重要组件之一。

直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的微机数据处理软件。

日历分为阴历和阳历。

阳历的历年为一个回归年,现时国际通用的公历(格里高历)即为太阳历的一种,亦简称为阳历;阴历亦称月亮历,或称太阴历,其历月是一个朔望月,历年为1 2个朔望月,其大月30天,小月29 天;中国的农历就是阴阳历的一种。

如何在Excel实现万年历是对Office能力的综合运用,又是分析问题并进行求解的一系列过程。

<!--[if !supportLists]-->2. <!--[endif]-->分析<!--[if !supportLists]-->2.1 整体构思在进行整体构思之前,不妨我们先看看多数日历是怎样的情形,其中:<!--[if !supportLists]-->1、<!--[endif]-->上面居中为当前年份。

<!--[if !supportLists]-->2、<!--[endif]-->然后为当年的12个月份,至于每行为3个月还是4个月取决于可见界面的大小和美观。

<!--[if !supportLists]-->3、<!--[endif]-->总所周知,一周则为7天,每个月最大31天,最小28天;如果1号为周六或周日的话,则该月可能要跨越6周;因此每个月最大的跨越为六周,事实上我们找一下其它日历的模板,就会发现一般都是六周。

所以我们可以把每个月视为一个7 *6的单元格集合。

我们将一步一步教您怎么制作EXCEL万年历!<!--[if !supportLists]-->2.2 <!--[endif]-->算法问题当我们确定了每个月事实上为7*6的单元格集合后,我们接下来要做以下几件事情:<!--[if !supportLists]-->1、<!--[endif]-->如何定位和填充相应的每月的7*6单元格在单纯的Excel表中,我们很难采用逻辑判断和循环的方式获取在7*6单元格集合中的第一个星期一应该是哪一天;但我们知道这个7*6单元格所在月的第一天即1号却是固定的,同样当日期固定后,该日期所在的星期几也是固定的,假设2010-01-01为星期五,那星期一是几号呢?很显然,为2010年1月1号向前推4天即2009年12月28号,星期二则为1月1号向前推3天,以此类推,可以推到整个42个单元格中,只不过超过当月第一天的日期则向后推了。

python3实现万年历(包括公历、农历、节气、节日)

python3实现万年历(包括公历、农历、节气、节日)

python3实现万年历(包括公历、农历、节气、节日)#!/usr/local/bin/python3# coding=utf-8# Created: 20/07/2012# Copyright: /txw1958/'''A Chinese Calendar Library in Python'''import os, io, sys, re, time, datetime, base64__version__ = "$Rev: 123 $"__all__ = ['LunarDate']solar_year = 1900solar_month = 1solar_day = 31solar_weekday = 0lunar_year = 0lunar_month = 0lunar_day = 0lunar_isLeapMonth = Falseclass LunarDate(object):_startDate = datetime.date(1900, 1, 31)def__init__(self, year, month, day, isLeapMonth=False):global lunar_yearglobal lunar_monthglobal lunar_dayglobal lunar_isLeapMonthlunar_year = int(year)lunar_month = int(month)lunar_day = int(day)lunar_isLeapMonth = bool(isLeapMonth)self.year = yearself.month = monthself.day = dayself.isLeapMonth = bool(isLeapMonth)def__str__(self):return'LunarDate(%d, %d, %d, %d)' % (self.year, self.month, self.day, self.isLeapMonth)__repr__ = __str__@staticmethoddef fromSolarDate(year, month, day):solarDate = datetime.date(year, month, day)offset = (solarDate - LunarDate._startDate).daysreturn LunarDate._fromOffset(offset)def toSolarDate(self):def _calcDays(yearInfo, month, day, isLeapMonth):isLeapMonth = int(isLeapMonth)res = 0ok = Falsefor_month, _days, _isLeapMonth in self._enumMonth(yearInfo):if (_month, _isLeapMonth) == (month, isLeapMonth):if 1 <= day <= _days:res += day - 1return reselse:raise ValueError("day out of range")res += _daysraise ValueError("month out of range")offset = 0if self.year < 1900 or self.year >= 2050:raise ValueError('year out of range [1900, 2050)')yearIdx = self.year - 1900for i in range(yearIdx):offset += yearDays[i]offset += _calcDays(yearInfos[yearIdx], self.month, self.day, self.isLeapMonth)return self._startDate + datetime.timedelta(days=offset)def__sub__(self, other):if isinstance(other, LunarDate):return self.toSolarDate() - other.toSolarDate()elif isinstance(other, datetime.date):return self.toSolarDate() - otherelif isinstance(other, datetime.timedelta):res = self.toSolarDate() - otherreturn LunarDate.fromSolarDate(res.year, res.month, res.day) raise TypeErrordef__rsub__(self, other):if isinstance(other, datetime.date):return other - self.toSolarDate()def__add__(self, other):if isinstance(other, datetime.timedelta):res = self.toSolarDate() + otherreturn LunarDate.fromSolarDate(res.year, res.month, res.day) raise TypeErrordef__radd__(self, other):return self + otherdef__lt__(self, other):return self - other < datetime.timedelta(0)def__le__(self, other):return self - other <= datetime.timedelta(0)@classmethoddef today(cls):res = datetime.date.today()return cls.fromSolarDate(res.year, res.month, res.day)@staticmethoddef _enumMonth(yearInfo):months = [(i, 0) for i in range(1, 13)]leapMonth = yearInfo % 16if leapMonth == 0:passelif leapMonth <= 12:months.insert(leapMonth, (leapMonth, 1))else:raise ValueError("yearInfo %r mod 16 should in [0, 12]"% yearInfo)for month, isLeapMonth in months:if isLeapMonth:days = (yearInfo >> 16) % 2 + 29else:days = (yearInfo >> (16 - month)) % 2 + 29yield month, days, isLeapMonth@classmethoddef _fromOffset(cls, offset):def _calcMonthDay(yearInfo, offset):for month, days, isLeapMonth in cls._enumMonth(yearInfo): if offset < days:breakoffset -= daysreturn (month, offset + 1, isLeapMonth)offset = int(offset)for idx, yearDay in enumerate(Info.yearDays()):if offset < yearDay:breakoffset -= yearDayyear = 1900 + idxyearInfo = Info.yearInfos[idx]month, day, isLeapMonth = _calcMonthDay(yearInfo, offset) return LunarDate(year, month, day, isLeapMonth)class ChineseWord():def weekday_str(tm):a = '星期日星期一星期二星期三星期四星期五星期六'.split()return a[tm]def solarTerm(year, month, day):a = '小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至'.split()returndef day_lunar(ld):a = '初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九廿十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十'.split()return a[ld - 1]def month_lunar(le, lm):a = '正月二月三月四月五月六月七月八月九月十月十一月十二月'.split()if le:return"闰" + a[lm - 1]else:return a[lm - 1]def year_lunar(ly):y = lytg = '甲乙丙丁戊己庚辛壬癸'.split()dz = '子丑寅卯辰巳午未申酉戌亥'.split()sx = '鼠牛虎兔龙蛇马羊猴鸡狗猪'.split()return tg[(y - 4) % 10] + dz[(y - 4) % 12] + '[' + sx[(y - 4) % 12] + ']' + '年'class Festival():#国历节日 *表示放假日def solar_Fstv(solar_month, solar_day):sFtv = ["0101#元旦节#","0202#世界湿地日#","0210#国际气象节#","0214#情人节#","0301#国际海豹日#","0303#全国爱耳日#","0305#学雷锋纪念日#","0308#妇女节#","0312#植树节# #孙中山逝世纪念日#","0314#国际警察日#","0315#消费者权益日#","0317#中国国医节# #国际航海日#","0321#世界森林日# #消除种族歧视国际日# #世界儿歌日#","0322#世界水日#","0323#世界气象日#","0324#世界防治结核病日#","0325#全国中小学生安全教育日#","0330#巴勒斯坦国土日#","0401#愚人节# #全国爱国卫生运动月(四月)# #税收宣传月(四月)#","0407#世界卫生日#","0422#世界地球日#","0423#世界图书和版权日#","0424#亚非新闻工作者日#","0501#劳动节#","0504#青年节#","0505#碘缺乏病防治日#","0508#世界红十字日#","0512#国际护士节#","0515#国际家庭日#","0517#国际电信日#","0518#国际博物馆日#","0520#全国学生营养日#","0523#国际牛奶日#","0531#世界无烟日#","0601#国际儿童节#","0605#世界环境保护日#","0606#全国爱眼日#","0617#防治荒漠化和干旱日#","0623#国际奥林匹克日#","0625#全国土地日#","0626#国际禁毒日#","0701#中国共?产党诞辰# #香港回归纪念日# #世界建筑日#", "0702#国际体育记者日#","0707#抗日战争纪念日#","0711#世界人口日#","0730#非洲妇女日#","0801#建军节#","0808#中国男子节(爸爸节)#","0815#抗日战争胜利纪念#","0908#国际扫盲日# #国际新闻工作者日#","0909#毛?泽东逝世纪念#","0910#中国教师节#","0914#世界清洁地球日#","0916#国际臭氧层保护日#","0918#九?一八事变纪念日#","0920#国际爱牙日#","0927#世界旅游日#","0928#孔子诞辰#","1001#国庆节# #世界音乐日# #国际老人节#","1002#国庆节假日# #国际和平与民主自由斗争日#", "1003#国庆节假日#","1004#世界动物日#","1006#老人节#","1008#全国高血压日# #世界视觉日#","1009#世界邮政日# #万国邮联日#","1010#辛亥革命纪念日# #世界精神卫生日#","1013#世界保健日# #国际教师节#","1014#世界标准日#","1015#国际盲人节(白手杖节)#","1016#世界粮食日#","1017#世界消除贫困日#","1022#世界传统医药日#","1024#联合国日#","1031#世界勤俭日#","1107#十月社会主义革命纪念日#","1108#中国记者日#","1109#全国消防安全宣传教育日#","1110#世界青年节#","1111#国际科学与和平周(本日所属的一周)#", "1112#孙中山诞辰纪念日#","1114#世界糖尿病日#","1116#国际宽容日#","1117#国际大学生节# #世界学生节#", "1120#彝族年#","1121#彝族年# #世界问候日# #世界电视日#", "1122#彝族年#","1129#国际声援巴勒斯坦人民国际日#", "1201#世界艾滋病日#","1203#世界残疾人日#","1205#国际经济和社会发展志愿人员日#", "1208#国际儿童电视日#","1209#世界足球日#","1210#世界人权日#","1212#西安事变纪念日#","1213#南京大屠杀(1937年)纪念日#", "1220#澳门回归纪念#","1221#国际篮球日#","1224#平安夜#","1225#圣诞节#","1226#毛?泽东诞辰纪念日#"]"0" + str(solar_month)solar_day_str = str(solar_day) if solar_day > 9 else"0"+ str(solar_day)pattern = "("+ solar_month_str + solar_day_str + ")([\w+?\#?\(?\)?\d+\s]*)"for solar_fstv_item in sFtv:result = re.search(pattern, solar_fstv_item)if result is not None:return result.group(2)def lunar_Fstv(lunar_month, lunar_day):#农历节日 *表示放假日#每年单独来算lFtv = ["0101#春节#","0115#元宵节#","0202#春龙节",#"0314#清明节#", #每年不一样,此为2012年,事实上为公历节日"0505#端午节#","0707#七夕情人节#","0715#中元节#","0815#中秋节#","0909#重阳节#","1208#腊八节#","1223#小年#","1229#除夕#"#每年不一样,此为2011年]"0" + str(lunar_month)lunar_day_str = str(lunar_day) if lunar_day > 9 else"0"+ str(lunar_day)pattern = "("+ lunar_month_str + lunar_day_str + ")([\w+?\#?\s?]*)"for lunar_fstv_item in lFtv:result = re.search(pattern, lunar_fstv_item)if result is not None:return result.group(2)#国历节日 *表示放假日def weekday_Fstv(solar_month, solar_day, solar_weekday):#某月的第几个星期几wFtv = ["0150#世界防治麻风病日#", #一月的最后一个星期日(月倒数第一个星期日)"0520#国际母亲节#","0530#全国助残日#","0630#父亲节#","0730#被奴役国家周#","0932#国际和平日#","0940#国际聋人节# #世界儿童日#","0950#世界海事日#","1011#国际住房日#","1013#国际减轻自然灾害日(减灾日)#","1144#感恩节#"]#7,14等应该属于1, 2周,能整除的那天实际属于上一周,做个偏移offset = -1 if solar_day % 7 == 0 else 0#计算当前日属于第几周,得出来从0开始计周,再向后偏移1weekday_ordinal = solar_day // 7 + offset + 1solar_month_str = str(solar_month) if solar_month > 9 else "0" + str(solar_month)solar_weekday_str = str(weekday_ordinal) + str(solar_weekday)pattern = "("+ solar_month_str + solar_weekday_str + ")([\w+?\#?\s?]*)"for weekday_fstv_item in wFtv:result = re.search(pattern, weekday_fstv_item)if result is not None:return result.group(2)#如何计算某些最后一个星期几的情况,..........#24节气def solar_Term(solar_month, solar_day):#每年数据不一样,此为2012年内的数据stFtv = ["0106#小寒#","0120#大寒#","0204#立春#","0219#雨水#","0305#惊蛰#","0320#春分#","0404#清明#","0420#谷雨#","0505#立夏#","0521#小满#","0605#芒种#","0621#夏至#","0707#小暑#","0722#大暑#","0807#立秋#","0823#处暑#","0907#白露#","0922#秋分#","1008#寒露#","1023#霜降#","1107#立冬#","1122#小雪#","1206#大雪#","1221#冬至#",]solar_month_str = str(solar_month) if solar_month > 9 else "0" + str(solar_month)solar_day_str = str(solar_day) if solar_day > 9 else"0"+ str(solar_day)pattern = "("+ solar_month_str + solar_day_str + ")([\w+?\#?]*)"for solarTerm_fstv_item in stFtv:result = re.search(pattern, solarTerm_fstv_item)if result is not None:return result.group(2)class Info():yearInfos = [# /* encoding:# b bbbbbbbbbbbb bbbb# bit# 1 111111000000 0000# 6 543210987654 3210# . ............ ....# month# 000000000111# M 123456789012 L## b_j = 1 for long month, b_j = 0 for short month# L is the leap month of the year if 1<=L<=12; NO leap month if L = 0.# The leap month (if exists) is long one iff M = 1.# */0x04bd8, # /* 1900 */0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950,# /* 1905 */ 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0,# /* 1910 */ 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540,# /* 1915 */ 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970,# /* 1920 */ 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54,# /* 1925 */ 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,# /* 1930 */ 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60,# /* 1935 */ 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0,# /* 1940 */ 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0,# /* 1945 */ 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0,# /* 1950 */ 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573,# /* 1955 */ 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6,# /* 1960 */ 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260,# /* 1965 */ 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0,# /* 1970 */ 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250,# /* 1975 */ 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0,# /* 1980 */0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50,# /* 1985 */ 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5,# /* 1990 */ 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58,# /* 1995 */ 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960,# /* 2000 */ 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0,# /* 2005 */ 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950,# /* 2010 */ 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0,# /* 2015 */ 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954,# /* 2020 */ 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6,# /* 2025 */ 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0,# /* 2030 */ 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0,# /* 2035 */ 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0,# /* 2040 */ 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0,# /* 2045 */ 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 # /* 2049 */]def yearInfo2yearDay(yearInfo):yearInfo = int(yearInfo)res = 29 * 12leap = Falseif yearInfo % 16 != 0:leap = Trueres += 29yearInfo //= 16for i in range(12 + leap):if yearInfo % 2 == 1:res += 1yearInfo //= 2return resdef yearDays():yearDays = [Info.yearInfo2yearDay(x) for x in Info.yearInfos] return yearDaysdef day2LunarDate(offset):offset = int(offset)res = LunarDate()for idx, yearDay in enumerate(yearDays()):if offset < yearDay:breakoffset -= yearDayres.year = 1900 + idxclass SolarDate():def__init__(self):global solar_yearglobal solar_monthglobal solar_dayglobal solar_weekdaysolar_year = int(time.strftime("%Y", time.localtime())) solar_month = int(time.strftime("%m", time.localtime())) solar_day = int(time.strftime("%d", time.localtime())) solar_weekday = int(time.strftime("%w", time.localtime()))self.year = solar_yearself.month = solar_monthself.day = solar_dayself.weekday = solar_weekdaydef__str__(self):return'LunarDate(%d, %d, %d, %d)' % (self.year, self.month, self.day, self.isLeapMonth)def getCalendar_today():solar = SolarDate()LunarDate.fromSolarDate(solar_year, solar_month, solar_day) festival = ""if Festival.solar_Term(solar_month, solar_day):festival = festival + " 今日节气:"+ Festival.solar_Term(solar_month, solar_day)if Festival.solar_Fstv(solar_month, solar_day):festival = festival + " 公历节日:"+ Festival.solar_Fstv(solar_month, solar_day)if Festival.weekday_Fstv(solar_month, solar_day, solar_weekday):if festival.find("公历节日") == -1:festival = festival + " 公历节日:"+ Festival.weekday_Fstv(solar_month, solar_day, solar_weekday) else:festival = festival + "" + Festival.weekday_Fstv(solar_month,solar_day, solar_weekday)if Festival.lunar_Fstv(lunar_month, lunar_day):festival = festival + " 农历节日:"+ Festival.lunar_Fstv(lunar_month, lunar_day)twitter = "今天是" + str(solar_year) + "年" + str(solar_month) + "月"+ str(solar_day) + "日"+ ""+ ChineseWord.weekday_str(solar_weekday) + " 农历"+ ChineseWord.year_lunar(lunar_year) + ChineseWord.month_lunar(lunar_isLeapMonth,lunar_month) + ChineseWord.day_lunar(lunar_day) + festivalprint(twitter)return twitterdef getCalendar_all_day():#solar = SolarDate()global solar_yearglobal solar_monthglobal solar_dayglobal solar_weekdaysolar_year = 2012solar_month = 1weekday_offset = 0 #1月1号星期几?index_day = 0for solar_month in range(1, 13):if solar_month in [1, 3, 5, 7, 8, 10, 12]:solar_day_max = 31elif solar_month in [4, 6, 9, 11]:solar_day_max = 30elif solar_month == 2:if((solar_year % 4 == 0) and(solar_year % 100 != 0)) or (solar_year % 400 == 0 ):solar_day_max = 29else:solar_day_max = 28else:Nonefor solar_day in range(1, solar_day_max + 1):index_day += 1solar_weekday = (index_day )% 7 + - 1solar_weekday = 0 if solar_weekday == 7 else solar_weekday solar_weekday = 6 if solar_weekday == -1 else solar_weekdayLunarDate.fromSolarDate(solar_year, solar_month, solar_day) festival = ""if Festival.solar_Term(solar_month, solar_day):festival = festival + " 节气:"+ Festival.solar_Term(solar_month, solar_day)if Festival.solar_Fstv(solar_month, solar_day):festival = festival + " 节日:"+ Festival.solar_Fstv(solar_month, solar_day)if Festival.weekday_Fstv(solar_month, solar_day, solar_weekday):if festival.find("节日") == -1:festival = festival + " 节日:"+ Festival.weekday_Fstv(solar_month, solar_day, solar_weekday)else:festival = festival + "" + Festival.weekday_Fstv(solar_month,solar_day, solar_weekday)if Festival.lunar_Fstv(lunar_month, lunar_day):if festival.find("节日") == -1:festival = festival + " 节日:"+ Festival.lunar_Fstv(lunar_month, lunar_day)else:festival = festival + ""+ Festival.lunar_Fstv(lunar_month,lunar_day)index_yy = str(solar_year)if int(solar_month) < 10:index_mm = "0" + str(solar_month)else:index_mm = str(solar_month)if int(solar_day) < 10:index_dd = "0" + str(solar_day)else:index_dd = str(solar_day)index_yyddmm = index_yy + index_mm + index_ddtwitter = ("message("+ str(index_yyddmm) + ') = "') + str(solar_year) + "年" + str(solar_month) + "月" + str(solar_day) + "日" + "" + ChineseWord.weekday_str(solar_weekday) +" 农历"+ ChineseWord.year_lunar(lunar_year) + ChineseWord.month_lunar(lunar_isLeapMonth,lunar_month)+ ChineseWord.day_lunar(lunar_day) + festival + '"'print(twitter)return twitterdef main():"main function"print(base64.b64decode(b'Q29weXJpZ2h0IChjKSAyMDEyIE RvdWN1YmUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg==').de code())getCalendar_all_day()getCalendar_today()if__name__ == '__main__':main()运行结果:*** Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32. ***>>>*** Remote Interpreter Reinitialized ***>>>Copyright (c) 2012 Doucube Inc. All rights reserved.message(20120101) = "2012年1月1日星期日农历辛卯[兔]年十二月初八节日:#元旦节# #腊八节#"message(20120102) = "2012年1月2日星期一农历辛卯[兔]年十二月初九"message(20120103) = "2012年1月3日星期二农历辛卯[兔]年十二月初十"message(20120104) = "2012年1月4日星期三农历辛卯[兔]message(20120105) = "2012年1月5日星期四农历辛卯[兔]年十二月十二"message(20120106) = "2012年1月6日星期五农历辛卯[兔]年十二月十三节气:#小寒#"message(20120107) = "2012年1月7日星期六农历辛卯[兔]年十二月十四"message(20120108) = "2012年1月8日星期日农历辛卯[兔]年十二月十五"message(20120109) = "2012年1月9日星期一农历辛卯[兔]年十二月十六"message(20120110) = "2012年1月10日星期二农历辛卯[兔]年十二月十七"message(20120111) = "2012年1月11日星期三农历辛卯[兔]年十二月十八"message(20120112) = "2012年1月12日星期四农历辛卯[兔]年十二月十九"message(20120113) = "2012年1月13日星期五农历辛卯[兔]年十二月廿十"message(20120114) = "2012年1月14日星期六农历辛卯[兔]年十二月廿一"message(20120115) = "2012年1月15日星期日农历辛卯[兔]年十二月廿二"message(20120116) = "2012年1月16日星期一农历辛卯[兔]年十二月廿三节日:#小年#"message(20120117) = "2012年1月17日星期二农历辛卯[兔]年十二月廿四"message(20120118) = "2012年1月18日星期三农历辛卯[兔]年十二月廿五"message(20120119) = "2012年1月19日星期四农历辛卯[兔]message(20120120) = "2012年1月20日星期五农历辛卯[兔]年十二月廿七节气:#大寒#"message(20120121) = "2012年1月21日星期六农历辛卯[兔]年十二月廿八"message(20120122) = "2012年1月22日星期日农历辛卯[兔]年十二月廿九节日:#除夕#"message(20120123) = "2012年1月23日星期一农历壬辰[龙]年正月初一节日:#春节#"message(20120124) = "2012年1月24日星期二农历壬辰[龙]年正月初二"message(20120125) = "2012年1月25日星期三农历壬辰[龙]年正月初三"message(20120126) = "2012年1月26日星期四农历壬辰[龙]年正月初四"message(20120127) = "2012年1月27日星期五农历壬辰[龙]年正月初五"message(20120128) = "2012年1月28日星期六农历壬辰[龙]年正月初六"message(20120129) = "2012年1月29日星期日农历壬辰[龙]年正月初七节日:#世界防治麻风病日#"message(20120130) = "2012年1月30日星期一农历壬辰[龙]年正月初八"message(20120131) = "2012年1月31日星期二农历壬辰[龙]年正月初九"message(20120201) = "2012年2月1日星期三农历壬辰[龙]年正月初十"message(20120202) = "2012年2月2日星期四农历壬辰[龙]年正月十一节日:#世界湿地日#"message(20120203) = "2012年2月3日星期五农历壬辰[龙]message(20120204) = "2012年2月4日星期六农历壬辰[龙]年正月十三节气:#立春#"message(20120205) = "2012年2月5日星期日农历壬辰[龙]年正月十四"message(20120206) = "2012年2月6日星期一农历壬辰[龙]年正月十五节日:#元宵节#"message(20120207) = "2012年2月7日星期二农历壬辰[龙]年正月十六"message(20120208) = "2012年2月8日星期三农历壬辰[龙]年正月十七"message(20120209) = "2012年2月9日星期四农历壬辰[龙]年正月十八"message(20120210) = "2012年2月10日星期五农历壬辰[龙]年正月十九节日:#国际气象节#"message(20120211) = "2012年2月11日星期六农历壬辰[龙]年正月廿十"message(20120212) = "2012年2月12日星期日农历壬辰[龙]年正月廿一"message(20120213) = "2012年2月13日星期一农历壬辰[龙]年正月廿二"message(20120214) = "2012年2月14日星期二农历壬辰[龙]年正月廿三节日:#情人节#"message(20120215) = "2012年2月15日星期三农历壬辰[龙]年正月廿四"message(20120216) = "2012年2月16日星期四农历壬辰[龙]年正月廿五"message(20120217) = "2012年2月17日星期五农历壬辰[龙]年正月廿六"message(20120218) = "2012年2月18日星期六农历壬辰[龙]message(20120219) = "2012年2月19日星期日农历壬辰[龙]年正月廿八节气:#雨水#"message(20120220) = "2012年2月20日星期一农历壬辰[龙]年正月廿九"message(20120221) = "2012年2月21日星期二农历壬辰[龙]年正月三十"message(20120222) = "2012年2月22日星期三农历壬辰[龙]年二月初一"message(20120223) = "2012年2月23日星期四农历壬辰[龙]年二月初二节日:#春龙节"message(20120224) = "2012年2月24日星期五农历壬辰[龙]年二月初三"message(20120225) = "2012年2月25日星期六农历壬辰[龙]年二月初四"message(20120226) = "2012年2月26日星期日农历壬辰[龙]年二月初五"message(20120227) = "2012年2月27日星期一农历壬辰[龙]年二月初六"message(20120228) = "2012年2月28日星期二农历壬辰[龙]年二月初七"message(20120229) = "2012年2月29日星期三农历壬辰[龙]年二月初八"message(20120301) = "2012年3月1日星期四农历壬辰[龙]年二月初九节日:#国际海豹日#"message(20120302) = "2012年3月2日星期五农历壬辰[龙]年二月初十"message(20120303) = "2012年3月3日星期六农历壬辰[龙]年二月十一节日:#全国爱耳日#"message(20120304) = "2012年3月4日星期日农历壬辰[龙]message(20120305) = "2012年3月5日星期一农历壬辰[龙]年二月十三节气:#惊蛰# 节日:#学雷锋纪念日#"message(20120306) = "2012年3月6日星期二农历壬辰[龙]年二月十四"message(20120307) = "2012年3月7日星期三农历壬辰[龙]年二月十五"message(20120308) = "2012年3月8日星期四农历壬辰[龙]年二月十六节日:#妇女节#"message(20120309) = "2012年3月9日星期五农历壬辰[龙]年二月十七"message(20120310) = "2012年3月10日星期六农历壬辰[龙]年二月十八"message(20120311) = "2012年3月11日星期日农历壬辰[龙]年二月十九"message(20120312) = "2012年3月12日星期一农历壬辰[龙]年二月廿十节日:#植树节# #孙中山逝世纪念日#"message(20120313) = "2012年3月13日星期二农历壬辰[龙]年二月廿一"message(20120314) = "2012年3月14日星期三农历壬辰[龙]年二月廿二节日:#国际警察日#"message(20120315) = "2012年3月15日星期四农历壬辰[龙]年二月廿三节日:#消费者权益日#"message(20120316) = "2012年3月16日星期五农历壬辰[龙]年二月廿四"message(20120317) = "2012年3月17日星期六农历壬辰[龙]年二月廿五节日:#中国国医节# #国际航海日#"message(20120318) = "2012年3月18日星期日农历壬辰[龙]年二月廿六"message(20120319) = "2012年3月19日星期一农历壬辰[龙]message(20120320) = "2012年3月20日星期二农历壬辰[龙]年二月廿八节气:#春分#"message(20120321) = "2012年3月21日星期三农历壬辰[龙]年二月廿九节日:#世界森林日# #消除种族歧视国际日# #世界儿歌日#"message(20120322) = "2012年3月22日星期四农历壬辰[龙]年三月初一节日:#世界水日#"message(20120323) = "2012年3月23日星期五农历壬辰[龙]年三月初二节日:#世界气象日#"message(20120324) = "2012年3月24日星期六农历壬辰[龙]年三月初三节日:#世界防治结核病日#"message(20120325) = "2012年3月25日星期日农历壬辰[龙]年三月初四节日:#全国中小学生安全教育日#"message(20120326) = "2012年3月26日星期一农历壬辰[龙]年三月初五"message(20120327) = "2012年3月27日星期二农历壬辰[龙]年三月初六"message(20120328) = "2012年3月28日星期三农历壬辰[龙]年三月初七"message(20120329) = "2012年3月29日星期四农历壬辰[龙]年三月初八"message(20120330) = "2012年3月30日星期五农历壬辰[龙]年三月初九节日:#巴勒斯坦国土日#"message(20120331) = "2012年3月31日星期六农历壬辰[龙]年三月初十"message(20120401) = "2012年4月1日星期日农历壬辰[龙]年三月十一节日:#愚人节# #全国爱国卫生运动月(四月)# #税收宣传月(四月)#"message(20120402) = "2012年4月2日星期一农历壬辰[龙]message(20120403) = "2012年4月3日星期二农历壬辰[龙]年三月十三"message(20120404) = "2012年4月4日星期三农历壬辰[龙]年三月十四节气:#清明#"message(20120405) = "2012年4月5日星期四农历壬辰[龙]年三月十五"message(20120406) = "2012年4月6日星期五农历壬辰[龙]年三月十六"message(20120407) = "2012年4月7日星期六农历壬辰[龙]年三月十七节日:#世界卫生日#"message(20120408) = "2012年4月8日星期日农历壬辰[龙]年三月十八"message(20120409) = "2012年4月9日星期一农历壬辰[龙]年三月十九"message(20120410) = "2012年4月10日星期二农历壬辰[龙]年三月廿十"message(20120411) = "2012年4月11日星期三农历壬辰[龙]年三月廿一"message(20120412) = "2012年4月12日星期四农历壬辰[龙]年三月廿二"message(20120413) = "2012年4月13日星期五农历壬辰[龙]年三月廿三"message(20120414) = "2012年4月14日星期六农历壬辰[龙]年三月廿四"message(20120415) = "2012年4月15日星期日农历壬辰[龙]年三月廿五"message(20120416) = "2012年4月16日星期一农历壬辰[龙]年三月廿六"message(20120417) = "2012年4月17日星期二农历壬辰[龙]message(20120418) = "2012年4月18日星期三农历壬辰[龙]年三月廿八"message(20120419) = "2012年4月19日星期四农历壬辰[龙]年三月廿九"message(20120420) = "2012年4月20日星期五农历壬辰[龙]年三月三十节气:#谷雨#"message(20120421) = "2012年4月21日星期六农历壬辰[龙]年四月初一"message(20120422) = "2012年4月22日星期日农历壬辰[龙]年四月初二节日:#世界地球日#"message(20120423) = "2012年4月23日星期一农历壬辰[龙]年四月初三节日:#世界图书和版权日#"message(20120424) = "2012年4月24日星期二农历壬辰[龙]年四月初四节日:#亚非新闻工作者日#"message(20120425) = "2012年4月25日星期三农历壬辰[龙]年四月初五"message(20120426) = "2012年4月26日星期四农历壬辰[龙]年四月初六"message(20120427) = "2012年4月27日星期五农历壬辰[龙]年四月初七"message(20120428) = "2012年4月28日星期六农历壬辰[龙]年四月初八"message(20120429) = "2012年4月29日星期日农历壬辰[龙]年四月初九"message(20120430) = "2012年4月30日星期一农历壬辰[龙]年四月初十"message(20120501) = "2012年5月1日星期二农历壬辰[龙]年四月十一节日:#劳动节#"message(20120502) = "2012年5月2日星期三农历壬辰[龙]年四月十二"message(20120503) = "2012年5月3日星期四农历壬辰[龙]年四月十三"message(20120504) = "2012年5月4日星期五农历壬辰[龙]年四月十四节日:#青年节#"message(20120505) = "2012年5月5日星期六农历壬辰[龙]年四月十五节气:#立夏# 节日:#碘缺乏病防治日#"message(20120506) = "2012年5月6日星期日农历壬辰[龙]年四月十六"message(20120507) = "2012年5月7日星期一农历壬辰[龙]年四月十七"message(20120508) = "2012年5月8日星期二农历壬辰[龙]年四月十八节日:#世界红十字日#"message(20120509) = "2012年5月9日星期三农历壬辰[龙]年四月十九"message(20120510) = "2012年5月10日星期四农历壬辰[龙]年四月廿十"message(20120511) = "2012年5月11日星期五农历壬辰[龙]年四月廿一"message(20120512) = "2012年5月12日星期六农历壬辰[龙]年四月廿二节日:#国际护士节#"message(20120513) = "2012年5月13日星期日农历壬辰[龙]年四月廿三节日:#国际母亲节#"message(20120514) = "2012年5月14日星期一农历壬辰[龙]年四月廿四"message(20120515) = "2012年5月15日星期二农历壬辰[龙]年四月廿五节日:#国际家庭日#"message(20120516) = "2012年5月16日星期三农历壬辰[龙]年四月廿六"message(20120517) = "2012年5月17日星期四农历壬辰[龙]message(20120518) = "2012年5月18日星期五农历壬辰[龙]年四月廿八节日:#国际博物馆日#"message(20120519) = "2012年5月19日星期六农历壬辰[龙]年四月廿九"message(20120520) = "2012年5月20日星期日农历壬辰[龙]年四月三十节日:#全国学生营养日# #全国助残日#"message(20120521) = "2012年5月21日星期一农历壬辰[龙]年闰四月初一节气:#小满#"message(20120522) = "2012年5月22日星期二农历壬辰[龙]年闰四月初二"message(20120523) = "2012年5月23日星期三农历壬辰[龙]年闰四月初三节日:#国际牛奶日#"message(20120524) = "2012年5月24日星期四农历壬辰[龙]年闰四月初四"message(20120525) = "2012年5月25日星期五农历壬辰[龙]年闰四月初五"message(20120526) = "2012年5月26日星期六农历壬辰[龙]年闰四月初六"message(20120527) = "2012年5月27日星期日农历壬辰[龙]年闰四月初七"message(20120528) = "2012年5月28日星期一农历壬辰[龙]年闰四月初八"message(20120529) = "2012年5月29日星期二农历壬辰[龙]年闰四月初九"message(20120530) = "2012年5月30日星期三农历壬辰[龙]年闰四月初十"message(20120531) = "2012年5月31日星期四农历壬辰[龙]年闰四月十一节日:#世界无烟日#"message(20120601) = "2012年6月1日星期五农历壬辰[龙]。

Python实现的简单万年历例子分享-电脑资料

Python实现的简单万年历例子分享-电脑资料

Python实现的简单万年历例子分享-电脑资料复制代码代码如下:#!/usr/bin/env python2#-*- coding:utf-8 -*-__author__ = 'jalright'"""使用python实现万年历"""def is_leap_year(year):"""判断是否是闰年,返回boolean值"""if year/4==0 and year/400 !=0:return Trueelif year/100 == 0 and year/400 ==0 :return Trueelse:return Falsedef getMonthDays(year,month):"""获取指定年月的月份有多少天"""days = 31 #31天居多,设置为默认值if month == 2 : #2月份要判断是否是闰年if is_leap_year(year):days=29else:days=28;elif month in [4,6,9,11]: #判断小月,只有30天days=30return daysdef getTotalDays(year,month):"""获取1990-01-01离现在有多少天,1990-01-01是星期一,以这个为标准来判断星期"""totalDays=0for i in range(1990,year): #使用range来循环,算出多少年多少天if is_leap_year(i): #判断是否是闰年totalDays += 366else:totalDays += 365for i in range(1,month): #使用range循环,算出今年前面几个月过了多少天totalDays +=getMonthDays(year,i)return totalDaysif __name__ == '__main__':while True: #循环判断是否输入错误的格式print "××××××××××python实现万年历××××××××"year = raw_input("请输入年份(如:1990):")month = raw_input("请输入月份:如:1")try: #捕捉输入异常格式和月份的正确year = int(year)month = int(month)if month <1 or month >1: #判断月份是否输入错误,错误就重新开始循环print "年份或者月份输入错误,请重新输入!"continueexcept: #捕捉到转换成整型异常,输出提示,重新开始循环print "年份或者月份输入错误,请重新输入!"continuebreak #如果没有异常就跳出循环#if is_leap_year(year):# print "%s是润年"%year#else:# print "%s是平年"%year#print "%s月份总共有%s天!"%(month,getMonthDays(year,month))print "日\t一\t二\t三\t四\t五\t六"iCount = 0 #计数器来判断是否换行for i in range(getT otalDays(year,month)%7):print '\t', #输出空不换行iCount+=1for i in range(1,getMonthDays(year,month)):print i,print '\t',iCount +=1if iCount%7 == 0 : #计数器取余为0,换行print ''您可能感兴趣的文章:Python时间戳与时间字符串互相转换实例代码python中关于时间和日期函数的常用计算总结(time和datatime) Python 时间处理datetime实例QQ空间搜狐微博人人网开心网百度搜藏更多Tags:Python 万年历复制链接收藏本文打印本文关闭本文返回首页上一篇:python实现simhash算法实例下一篇:windows下wxPython开发环境安装与配置方法相关文章2013-01-01Python内置的字符串处理函数整理2014-05-05python应用程序在windows下不出现cmd窗口的办法2013-11-11python Django连接MySQL数据库做增删改查2008-09-09Python urlopen 使用小示例2014-02-02python基础教程之实现石头剪刀布游戏示例2014-03-03用Python和MD5实现网站挂马检测程序2014-05-05Python Web开发模板引擎优缺点总结2008-08-08Python备份Mysql脚本2013-11-11python读取Android permission文件2014-06-06python网络编程学习笔记(六):Web客户端访问文章评论最近更新python thread 并发且顺序运行示例Python continue语句用法实例python实现apahce网站日志分析示例分析python服务器拒绝服务攻击代码pyqt4教程之实现半透明的天气预报界面示例Python爬虫框架Scrapy安装使用步骤Python实现多线程下载文件的代码实例python读写文件操作示例程序python解析xml模块封装代码zbar解码二维码和条形码示例热点排行Python入门教程超详细1小时学会python 中文乱码问题深入分析比较详细Python正则表达式操作指Python字符串的encode与decode研Python open读写文件实现脚本Python enumerate遍历数组示例应Python 深入理解yieldPython+Django在windows下的开发python 文件和路径操作函数小结python 字符串split的用法分享。

手把手教你用EXCEL制作日历

手把手教你用EXCEL制作日历

今天我们介绍用Excel制作万年历的方法。

这个万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。

如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧!本文所涉及到的函数有:1、AND (logical1,logical2, ...>2、DATE (year,month,day>3、DAY (serial_number>4、IF (Logical,Value_if_true,Value_if_false>5、INT (number>6、MONTH (serial_number>7、NOW (>8、OR (logical1,logical2, ...>b5E2RGbCAP1、启动EXCEL2003,新建一个工作表,取名保存<如万年历.xls),并在相应的单元格中,输入如图1所示的文本。

p1EanqFDPw注意:TODAY<)函数用于提取当前系统日期,请将系统日期一定要调整准确哟。

3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2>=7,"日",WEEKDAY(B1,2>>;选中H1单元格,输入公式:=NOW<)。

5PCzVD7HxA选中F1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“特殊”选项,再在右侧“类型”下面选中“中文小写数字”选项,“确定”退出,将“星期数”设置成中文小写形式;选中H1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“时间”选项,再在右侧“类型”下面选中一款时间格式,“确定”退出。

jLBHrnAILg注意:①上述前面一个公式的含义是:如果<IF)当前日期<B1)是星期“7”<WEEKDAY(B1,2>=7),则在F1单元格中显示“日”,否则,直接显示出星期的数值<WEEKDAY(B1,2>)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档