1. 不借助任何时间API实现
- 先求出每月的第一天是星期几,再求出每个月一共有多少天,而且也要判断年份是否是闰年。
- 根据每月的第一天是星期几得出前面要打印多少空格。
- 每打印七天就换一次行。
boolean isLeap(int year){
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int getDaysOfMonth(int year, int month){
switch (month){
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isLeap(year))
return 29;
else
return 28;
default:
return 31;
}
}
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
int days=0;
for (int i = 1900; i < year; i++){
if (isLeap(i)){
days += 366;
}else {
days += 365;
}
}
for (int i = 1; i < month; i++) {
days+=getDaysOfMonth(year, i);
}
int dayOfWeek = (days+1)%7;
System.out.println("一\t二\t三\t四\t五\t六\t日");
for (int i = 0; i < dayOfWeek - 1; i++) {
System.out.print("\t");
}
int daysOfMonth = getDaysOfMonth(year, month);
for (int i = 1; i <= daysOfMonth; i++) {
System.out.print(i+"\t");
if ((dayOfWeek-1+i)%7==0)
System.out.println();
}
scanner.close();
2. Calendar类
先切换到对应的年月日,再利用getActualMaximum(Calendar.DAY_OF_MONTH)获取当月一共有多少天,Calendar.DAY_OF_WEEK获取当天是星期几。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month - 1);
calendar.set(Calendar.DAY_OF_MONTH,1);
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("一\t二\t三\t四\t五\t六\t日");
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (week == 0)
week = 7;
for (int i = 0; i < week - 1; i++) {
System.out.print("\t");
}
for (int i = 1; i <= maxDay; i++) {
System.out.print(i + "\t");
if ((week+i-1) % 7 == 0)
System.out.println();
}
scanner.close();
3. JDK8的LocalDate
LocalDate.of()设置日期,localDate.getDayOfWeek()获取星期,localDate.lengthOfMonth()获取月份天数。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
LocalDate localDate = LocalDate.of(year, month,1);
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
System.out.println("一\t二\t三\t四\t五\t六\t日");
for (int i = 0; i < dayOfWeek.getValue() - 1; i++) {
System.out.print("\t");
}
for (int i = 1; i <= localDate.lengthOfMonth(); i++) {
System.out.print(i + "\t");
if ((dayOfWeek.getValue() + i - 1 )% 7 == 0)
System.out.println();
}
scanner.close();