万年历
以1900年1月1号星期一为时间原点
星期日 | 第一天 |
星期一 | 第二天 |
星期二 | 第三天 |
星期三 | 第四天 |
星期四 | 第五天 |
星期五 | 第六天 |
星期六 | 第七天 |
1.计算出当前日期距离原点的天数(例:2016/9/18)
2015到1900之间有多少个瑞年和平年-->count1
![](https://images2015.cnblogs.com/blog/1008304/201703/1008304-20170305223502313-536666482.png)
2016年一月到八月的总天数-->count2
本月的一号
count = count1+count2+1
2.计算出本月的一号是一周的第几天
k = count%7;(打印一号前面有多少空格)
3.计算出该月有多少天
maxDays
4.循环打印
1.for(int i=1;i<=maxDays;i++)
2.k充当指示器,到每周的第七天自动换行
![](https://images2015.cnblogs.com/blog/1008304/201703/1008304-20170305223502595-846919913.png)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.bjsxt.game; 2 import java.util.Scanner; 3 public class Calendar { 4 public static boolean isLeapYear(int year){ 5 if(year%4==0&&year%100!=0 || year%400==0){ 6 return true; 7 } 8 return false; 9 } 10 11 //计算当前月份的最大天数 12 public static int maxDays(int month,int year){ 13 14 int maxDays; 15 if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) 16 maxDays = 31; 17 else if(month==4 || month==6 || month==9 || month==11) 18 maxDays = 30; 19 else{ 20 if(isLeapYear(year)) 21 maxDays = 29; 22 else 23 maxDays = 28; 24 } 25 return maxDays; 26 } 27 28 //计算当前月份一号是一周的第几天 29 public static int count(int month,int year){ 30 int k; //表示当前的输入值是一周的第几天 31 int r = 0, p = 0; 32 int count; //表示距离1970.1.1有多少天 33 //计算当前年份之前的瑞年和平年有多少个 34 for(int i=1900;i<year;i++){ 35 if(isLeapYear(i)) 36 r++; 37 else 38 p++; 39 } 40 count = 366*r+365*p; 41 //判断当前月份之前的总天数 42 for(int i=1;i<month;i++){ 43 if(i==2){ 44 if(isLeapYear(year)) 45 count = count + 29; 46 else 47 count = count + 28; 48 } 49 else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12) 50 count = count + 31; 51 else 52 count = count + 30; 53 } 54 k = (count+1)%7+1; 55 return k; 56 } 57 public static void main(String[] args) { 58 Scanner input = new Scanner(System.in); 59 60 System.out.print("请输入年:"); 61 int year = input.nextInt(); 62 63 System.out.print("请输入月:"); 64 int month = input.nextInt(); 65 66 System.out.print("请输入日:"); 67 int day = input.nextInt(); 68 69 int maxDays = maxDays(month,year); //计算当前输入的月份最大值是多少天 70 int k = count(month, year); //计算当前月份的1号是第几天 71 72 System.out.println("日\t一\t二\t三\t四\t五\t六"); 73 for(int i=0;i<k-1;i++){ 74 System.out.print(" \t"); 75 } 76 for(int i=1;i<=maxDays;i++){ 77 System.out.print(i+"\t"); 78 if(k%7 == 0){ 79 System.out.println("\n"); 80 k = 0; 81 } 82 k++; 83 } 84 } 85 }