1. 程式人生 > >[Java]使用Calendar類輸出指定年份和月份的日曆

[Java]使用Calendar類輸出指定年份和月份的日曆

題目

題目另可表述為:
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
在這裡插入圖片描述

原始碼下載

百度網盤