设计思路:
以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(); } }