一.功能

根据用户输入的年份和月份,在控制台打印出对应月份的日历。

二.算法

要打印一个月的日历只需要知道两件事。

1.这个月第一天是星期几

本例子中,使用蔡勒公式,判断某年某月的一号是周几,关于蔡勒公式不了解的同学可以百度一下,这里不作讲解。使用"蔡勒公式"计算某月第一天是周几的好处有:(1).不用选择参考年月日;(2)不用计算参考日到计算日的间隔天数;(3)不用计算一年有多少天。

2.这个月有多少天

使用switch-case语句进行判断,大月31天,小月30天,2月闰年29天,平年28天。

 三.源码

  •  
import java.util.Scanner;public class DateUtils{
 /*判断是否为闰年*/  public boolean isleap(int year){   if((year%4==0)&&(year%100!=0)||year%400==0) return true;   else return false;  }  /*判断这个月有多少天*/  public int daysOfmonth(int year,int month){   int days = 0;   switch(month){   /*大月*/   case 1:   case 3:   case 5:   case 7:   case 8:   case 10:   case 12:    days=31;break;  /*小月*/   case 4:   case 6:   case 9:   case 11:    days=30;break;  /*二月*/   case 2:if(isleap(year)==true) days=29;          else days=28;break;   default:    System.out.println("程序错误:输入的月份有误!");    return 0;   }  return days;  }/**     * 蔡勒公式,判断某年某月的一号是周几     * @param year 年     * @param month 月     * @return week(0,6)     */    private int weekOffirst(int year,int month){        int m=month;        int d=1;        if(month<=2){ /*对小于2的月份进行修正*/            year--;            m=month+12;        }        int y=year % 100;        int c=year/100;//世纪数减1        int w=(y+y/4+c/4-2*c+(13*(m+1)/5)+d-1)%7;        if(w < 0) /*修正计算结果是负数的情况*/            w+= 7;        return w;    }     /*打印日历*/     public void dataprint(int year,int month,int week){      System.out.println("\t\t"+year+"年"+" "+month+"月");      System.out.println("日\t一\t二\t三\t四\t五\t六");      int[][] data = new int[6][7] ;      int daynum=1;      for(int i=0;daynum<=daysOfmonth(year,month);i++){       for(int j=0;j<7&&daynum<=daysOfmonth(year,month);j++){        if(i==0&&j<week) {         data[i][j]=0;         System.out.print("\t");        }        else {         data[i][j]=daynum++;         System.out.print(data[i][j]+"\t");        }       }System.out.println();      }     }     /*主函数入口*/     public static void main(String[] args){      DateUtils du=new DateUtils();      Scanner scn=new Scanner(System.in);      System.out.print("输入要打印的年:");      int year=scn.nextInt();      System.out.print("输入要打印的月:");      int month=scn.nextInt();      scn.close();      int week;      week=du.weekOffirst(year,month);      du.dataprint(year, month, week);     }}

 

效果预览

Java打印年月日历_日历

 

 


 

Java打印年月日历_日历_02