方法一:
/*
* 用Calendar来写
* 1.设定日期c.set(year, month-1, 1),日历的月份从0开始,所以输入的月份都需要减1
* 2.计算月份最大的天数c.getActualMaximum(Calendar.DAY_OF_MONTH);
*/
public static void method1(){
Scanner in=new Scanner(System.in);
Calendar c=Calendar.getInstance();
System.out.println("请输入年份");
int year=in.nextInt();
System.out.println("请输入月份");
int month=in.nextInt();
c.set(year, month-1, 1);//日期设置为1,就比对1号就可以了,日历上的月份是(0—-11)
int days=c.getActualMaximum(Calendar.DAY_OF_MONTH);
int weekDay=c.get(Calendar.DAY_OF_WEEK);//日历上的星期日对应的是1
System.out.println(days+" "+weekDay);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<weekDay;i++){
System.out.print("\t");
}
for(int i=1;i<=days;i++){
if((i+weekDay-1)%7==0){
System.out.println(i);
}else{
System.out.print(i+"\t");
}
}
}
方法二:
/*
* 基础的方式写
* 1.计算1900年1月1日到现在(我这里今天日期是2020年5月29日)的总天数,(闰年:能被4整除且不能被100整除或者能被400整除)
* 2.求出星期几(总天数%7),同时对每个月的循环的天数进行判断
*/
public static void method2(){
Scanner in=new Scanner(System.in);
System.out.println("请输入年份");
int year=in.nextInt();
System.out.println("请输入月份");
int month=in.nextInt();
int sum=0;
int h=0;
for(int i=1900;i<year;i++){
if(i%4==0&&i%100!=0||i%400==0){//判断是否为闰年
sum+=366;
}else{
sum+=365;
}
}
/*
* 月份的天数
*/
for(int i=1;i<month;i++){
if(i==2){
if(year%4==0&&year%100!=0||year%400==0){
sum+=29;
}else{
sum+=28;
}
}else if(i==4||i==6||i==9||i==11){
sum+=30;
}else{
sum+=31;
}
}
sum+=29;//今天的天数
int week=sum%7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=week;i++){
System.out.print("\t");
}
/*
* 判断输出的月份有多少天
*/
if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
h=29;
}else{
h=28;
}
}else if(month==4||month==6||month==9||month==11){
h=30;
}else{
h=31;
}
for(int i=1;i<=h;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}