万年历
题目要求:
输入年份,输入月数,输出月历
Java编写的代码如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* @ClassName: NewCalendar
* @Description: 万年历
* @author quanhan
* @date 2019年3月27日
*
*/
public class NewCalendar {
public static void main(String[] args) throws ParseException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
NCalendar(year,month);
}
public static void NCalendar(int year,int month) throws ParseException {
//输出部分
System.out.println(year+"年"+month+"月");
System.out.println("---------------------------------------------------");
for(int i = 0;i < 7;i++) {
if(i == 0) {
System.out.print("星期7\t");
}else {
System.out.print("星期"+i+"\t");
}
}
System.out.println();
//关键部分
//判断year是瑞年还是平年,用flag = 1来表示瑞年
int flag = 0;
if(year % 4 ==0 && year % 100 != 0 || year % 400 == 0) {
flag = 1;
}
//判断该年的month有多少天
int dayNum = 0;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayNum = 31;
break;
case 4:
case 6:
case 9:
case 11:
dayNum = 30;
break;
case 2:
if(flag == 0) dayNum = 28;
else dayNum = 29;
break;
}
//判断该月一号是一周的第几天
String yearStr = String.valueOf(year);
String monthStr = String.valueOf(month);
String dateStr = yearStr+"-"+monthStr+"-"+"01";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
//System.out.println(dayOfWeek);//验证
//打印日历
int num = dayOfWeek-1;//num用来计数,每七次就换行
for(int i = 1;i < dayOfWeek;i++) {//输出一号之前的空格
System.out.print("\t");
}
for(int i = 1;i <= dayNum;i++) {//输出从1号开始输出
System.out.print(i+"\t");
num++;
if(num % 7 == 0) {
System.out.println();
}
}
}
}