13.4
显示日历
import java.text.SimpleDateFormat;
import java.util.Date;
class PrintCalendar {
private String year;
private String month;
public PrintCalendar() {
this.year = getCurrentYear();
this.month = getCurrentMonth();
}
public PrintCalendar(String month) {
this.year = getCurrentYear();
this.month = month;
}
public PrintCalendar(String year, String month) {
this.year = year;
this.month = month;
}
public static String getCurrentYear() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
Date date = new Date();
return sdf.format(date);
}
public static String getCurrentMonth() {
SimpleDateFormat sdf = new SimpleDateFormat("MM");
Date date = new Date();
return sdf.format(date);
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public void printMonth() {
printMonthTitle(getYear(), getMonth());
printMonthBody(getYear(), getMonth());
}
private void printMonthBody(String year, String month) {
int startDay = getStartDay(year, month); //得到每月开始天数
int numberofDaysInMonth = getNumberOfDaysInMonth(year, month); //得到每月具体时间
int i = 0;
for (i = 0; i < startDay; i++) {
System.out.print(" ");
}
for (i = 1; i <= numberofDaysInMonth; i++) {
System.out.printf("%4d", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
System.out.println();
}
private int getNumberOfDaysInMonth(String year, String month1) {
int month = Integer.parseInt(month1);
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month ==12) {
return 31;
} else if (month == 2)
return isLeapYear(year)?29:28;
else if (month == 4 || month ==6 || month == 9 || month == 11)
return 30;
return 0; //当month值错误的时候,返回0
}
private boolean isLeapYear(String year2) {
int year = Integer.parseInt(year2);
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
private int getStartDay(String year2, String month2) {
final int START_DAY_FOR_JAN_1_1800 = 3;
int totalNumberDays = getTotalNumberOfDays(year, month);
return (totalNumberDays + START_DAY_FOR_JAN_1_1800) % 7;
}
private int getTotalNumberOfDays(String year2, String month2) {
int year = Integer.parseInt(year2);
int month = Integer.parseInt(month2);
int total = 0;
for (int i = 1800; i < year; i++) {
if ( isLeapYear(i+"") )
total += 366;
else
total += 365;
}
for (int i = 1; i < month; i++) {
total += getNumberOfDaysInMonth(year2, i+"");
}
return total;
}
private void printMonthTitle(String year2, String month2) {
System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("-------------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}
private String getMonthName(String month2) {
String monthName = "";
int month = Integer.parseInt(month2);
switch (month) {
case 1: monthName = "Janurary"; break;
case 2: monthName = "February"; break;
case 3: monthName = "March"; break;
case 4: monthName = "April"; break;
case 5: monthName = "May"; break;
case 6: monthName = "June"; break;
case 7: monthName = "July"; break;
case 8: monthName = "August"; break;
case 9: monthName = "September";break;
case 10:monthName = "October"; break;
case 11:monthName = "November"; break;
case 12:monthName = "December"; break;
default: try {
throw new Exception("The month number input error.");
} catch (Exception e) {
e.printStackTrace();
}
}
return monthName;
}
}
测试:
public class Test13_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrintCalendar t = new PrintCalendar();
t.printMonth();
PrintCalendar t2 = new PrintCalendar("7");
t2.printMonth();
PrintCalendar t3 = new PrintCalendar("2079","8");
t3.printMonth();
}
}
结果
June 2018
-------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
July 2018
-------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
August 2079
-------------------------------
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31