Java_某年某月的月历

这里学习使用Calendar日历类

要求

日期类。输入年份和月份,显示该月的月历(注:每周从星期一开始,不是星期日开始)

参考

代码

import java.util.Calendar;
import java.util.Scanner;

public class test4_1 {
    public static void main(String[] args) {
        System.out.print("请输入年月如:2020 02:");
        Scanner scan = new Scanner(System.in);
        int year = 2000, month = 01, max;
        if (scan.hasNextInt()) {
            year = scan.nextInt();
        } else {
            System.out.println("输入有误,程序退出");
            System.exit(-1);
        }
        if (scan.hasNextInt()) {
            month = scan.nextInt();
        } else {
            System.out.println("输入有误,程序退出");
            System.exit(-1);
        }
        scan.close();
        if (year > 9999 || month < 1 || month > 12) {
            System.out.println("输入不合乎规范");
            System.exit(-2);
        } else {
            Calendar calendar = Calendar.getInstance();
            calendar.set(year, month - 1, 1);// 由于日历的月份从0开始,所以需要-1
            max = calendar.get(Calendar.DAY_OF_MONTH);
            int weak = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7;
            // 得到一号是周几,这里利用了循环1234567123...把原来周0为周日变成周7是周日
            // 因为需要让每周从周一开始
            if (month == 12) {
                max = 31;
            } else {
                Calendar tmp = Calendar.getInstance();
                tmp.set(year, month, 1);
                tmp.add(Calendar.DAY_OF_MONTH, -1);
                max = tmp.get(Calendar.DAY_OF_MONTH);
            }
            String[] a = new String[weak + max];
            for (int i = 0, n = 1; i < weak + max; ++i) {
                if (i < weak) {
                    a[i] = "";
                } else {
                    a[i] = String.valueOf(n);
                    n++;
                }
            }
            System.out.printf("%6s年%2s月", String.valueOf(year), String.valueOf(month));
            System.out.printf("\n%3c%3c%3c%3c%3c%3c%3c\n", '一', '二', '三', '四', '五', '六', '日');
            // unicode字符中,一个汉字是占用了2个字节,所以一个空格加一个汉字是3个字节宽度(右对齐)
            for (int i = 0; i < a.length; ++i) {
                if (i % 7 == 0 && i != 0) {
                    System.out.println();
                }
                System.out.printf("%4s", a[i]);
            }
            System.out.println();
        }
    }
}

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注