1、使用公式的方式实现万年历功能
public class CalendarUtil {
public static int getMonthDays(int year,int month){
int days = 0;
switch (month) {
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
days = 29;
} else {
days = 28;
}
break;
default:
System.out.println("请您输入1-12的月份!");
break;
}
return days;
}
public static int getYearDays(int year,int month,int day){
int days = 0;
for (int i = 1; i < month; i++) {
days += getMonthDays(year, i);
}
days += day;
return days;
}
public static int getWeek(int year,int month,int day){
int days = getYearDays(year, month, day);
int week = (year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
return week;
}
public static void dateFormat(int year,int month){
int count = 0;
System.out.println("<<<<<<<<<<<<<<< 万年历 >>>>>>>>>>>>>>>");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
System.out.println();
int week = getWeek(year, month, 1);
for (int i = 0; i < week; i++) {
count ++;
System.out.print("\t");
}
int monthDays = getMonthDays(year, month);
for (int i = 1; i <= monthDays; i++) {
count ++;
System.out.print(i + "\t");
if (count % 7 == 0) {
System.out.println();
System.out.println();
}
}
System.out.println();
}
}
2、使用Calendar类实现万年历功能
public class CalendarUtilOne {
public static void showCalendar() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
Calendar cd = Calendar.getInstance();
cd.set(Calendar.YEAR, year);
cd.set(Calendar.MONTH, month-1);
cd.set(Calendar.DATE, 1);
int monthDays = cd.getActualMaximum(Calendar.DATE);
int week = cd.get(Calendar.DAY_OF_WEEK);
int count = 0;
System.out.println("<<<<<<<<<<<<<万年小日历>>>>>>>>>>>>>>");
System.out.println("\n\t\t" + year + " 年 " + month + " 月 \n");
String[] weekStr = {"日\t","一\t","二\t","三\t","四\t","五\t","六\t"};
for (int i = 0; i < weekStr.length; i++) {
System.out.print(weekStr[i]);
}
System.out.println("\n");
for (int i = 0; i < week-1; i++) {
System.out.print("\t");
count++;
}
for (int i = 1; i <= monthDays; i++) {
count++;
System.out.print(i+"\t");
if (count % 7 == 0) {
System.out.println();
}
}
}
}