输入年份,如2014,打印出该年万年历,以及标识出当天日期。类似于linux下的cal -y结果。
public class Calendar {
public static boolean isLeapYear(int year){
boolean leapYear = false;
if(year%100==0&&year%400==0){
leapYear = true;
}else if(year%100!=0&&year%4==0){
leapYear = true;
}
return leapYear;
}
/**
* 以2015年1月1日,周四,为基准
* @param year
* @return
*/
public static int countDays(int year){
int days = 0;
int start = 2015;
int end = year;
if(start>end){
start = year;
end = 2015;
}
for(int i=start; i<end; i++){
if(isLeapYear(i)){
days += 366;
}else{
days +=365;
}
}
return days;
}
public static void showCalendar(int year){
int days = countDays(year);
int weekDay = days%7;
if(year>=2015){
weekDay = (weekDay+4)%7;
}else{
weekDay = 4 - weekDay;
if(weekDay<0){
weekDay += 7;
}
}
String [] monthLabels = new String[]{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
String [] labels = new String[]{"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
for(int i=1; i<=12; i++){
System.out.println("\n\n"+monthLabels[i-1]);
for(String label: labels){
System.out.print(label+" ");
}
System.out.println();
int monthDays = 30;
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
monthDays = 31;
}else if(i==2){
if(isLeapYear(year)){
monthDays = 29;
}else monthDays = 28;
}
for(int j=0; j<weekDay; j++){
System.out.print(" ");
}
for(int j=1; j<=monthDays; j++){
if((j+weekDay-1)%7==0) System.out.println();
System.out.print(j+" ");
}
weekDay = (weekDay+monthDays) % 7;
}
}
public static void main(String [] args){
showCalendar(2013);
}
}