[Java]使用Calendar類輸出指定年份和月份的日曆
阿新 • • 發佈:2018-12-13
題目
題目另可表述為:
1.輸入一個年份和月份,按格式輸出此月份的日曆
2.以如下格式輸出一個月份的日曆
程式碼實現
1.Calendar類的一些說明
Calendar類是一個抽象類,不能通過new的方式來獲得例項,可以使用類方法getInstance()返回一個Calendar的子類物件.
Calendar calendar = Calendar.getInstance();
Calendar類的操作需要首先設定日期:
calendar.set(year, month - 1, day);
由於Java中月份從0月開始計數,所以真實月份12月(month=12) 需要減1 才是Java中的12月
在輸出日曆時,只需要關注本月第一天是星期幾即可,例如圖中
2015年8月1日對應星期六.
這裡使用方法
int startDay=calendar.get(Calendar.DAY_OF_WEEK);
得到startDay=7.說明2015年8月1日是本週的第7天.
Java中規定了每週第一天是星期日,所以星期日=1,星期一=2…星期六=7
2.天數的判斷
月份有大小月之分,其中大月31天,小月30天,特殊的2月有28天.閏年2月有29天.
public static int maxDayInMonth(int year, int month) {
int max = 30 ;
if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
else if (month == 2) max = 28;
else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
return max;
}
3.空格補全
如果第一天是星期六, 需要將第一週的前6天用空格補全,代表前6天來自於9月份的25-30日.
public static void fillSpace(int startDay) {
for (int i = 1; i < startDay; i++) {
System.out.printf("%4s", " ");
}
}
4.日曆的輸出
public static void printCalender() {
int year = 2015;
int month = 8;
//input
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本週第一天是星期幾
int count = startDay - 1; //第一週的初始計數
int maxDay = maxDayInMonth(year, month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
fillSpace(startDay);
for (int i = 1; i <= maxDay; i++) {
System.out.printf("%3d%s", i, " "); //使用printf函式進行格式對齊
count++;
if (count >= 7) { //每輸出7天換一次行
count = 0;
System.out.print('\n');
}
}
}
完整程式碼
import java.util.Calendar;
public class LittleCode_3 {
public static void printCalender() {
int year = 2015;
int month = 8;
//input
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int startDay = calendar.get(Calendar.DAY_OF_WEEK); //求本週第一天是星期幾
int count = startDay - 1; //第一週的初始計數
int maxDay = maxDayInMonth(year, month);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
fillSpace(startDay);
for (int i = 1; i <= maxDay; i++) {
System.out.printf("%3d%s", i, " "); //使用printf函式進行格式對齊
count++;
if (count >= 7) { //每輸出7天換一次行
count = 0;
System.out.print('\n');
}
}
}
public static void fillSpace(int startDay) {
for (int i = 1; i < startDay; i++) {
System.out.printf("%4s", " ");
}
}
public static int maxDayInMonth(int year, int month) {
int max = 30;
if (month == 1 | month == 3 | month == 5 | month == 7 | month == 8 | month == 10 | month == 12) max = 31;
else if (month == 2) max = 28;
else if (month == 2 & (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) max = 29;
return max;
}
public static void main(String[] args) {
printCalender();
}
}
輸出結果
輸入year=2015 month=8