万年历(java实现)

时间:2021-06-03 11:03:51

设计思路

以1900年1月1日(该年1月1日为周一)为基准,计算这一天与输入的日期的那一个月的第一天的距离totalDay,(例如:输入2015 6 6)则计算 1900 1.1 到 2015年 6.1;

用totalDay取余7 + 1,就能得到输入日期那一个月的第一天是周几,然后判断该月的天数输出就行了。

1 ,3 ,5 ,7 ,8 ,10, 12月有31天,2月闰年29天,平年28天;其余月份30天;

年份是4的倍数但不是100的倍数,或者年份是400的倍数,则该年为闰年;


import java.util.*;
public class calendar{
	public static void main(String[] args){
			System.out.println("请输入日期");
			Scanner in=new Scanner(System.in);
			int year=in.nextInt();
			int month=in.nextInt();
			int days=in.nextInt();
			int cnt=0;//计算年差,累计的日期(距离1900年1月1日)(1900年1月1日为周一)
			for(int i=1900;i<year;i++)
			{
				if(i%4==0&&i%100!=0||i%400==0)
					cnt+=366;
				else
					cnt+=365;
			}
			int cnt2=0;//计算月差累计的日期
			for(int i=1;i<month;i++)
			{
				if(i==2)
				{
					if(year%4==0&&year%100!=0||year%400==0)
						cnt2+=29;
					else
						cnt2+=28;
				}
				else if(i==4||i==6||i==9||i==11)
					cnt2+=30;
				else 
					cnt2+=31;
			}
			int totalDay=cnt+cnt2+1;//输入日期的月份的第一天与1900年1月1日的日期差
		        //System.out.println(totalDay);
			int monweek=(totalDay%7); //判断输入日期的月份的第一天是星期几
			//System.out.println(monweek);
			System.out.println("日\t一\t二\t三\t四\t五\t六");
			int limit;//该月有几天
			if(month==2)
			{
				if(year%4==0&&year%100!=0||year%400==0)
					limit=29;
				else
					limit=28;
			}
			else if(month==4||month==6||month==9||month==11)
				limit=30;
			else
				limit=31;
			int k=1;
			for(int i=0;i<monweek;i++)
				System.out.print("\t");
			while(k!=limit+1)
			{
				System.out.print(k++ +"\t");
				monweek++;
				if(monweek%7==0)
					System.out.println();
			}
			System.out.println();
		}
	}