java打印指定年月的日历

  

Java 打印指定年月的日历

1. 概述

本教程将介绍如何使用 Java 打印指定年月的日历,本教程不需要使用任何第三方库。

2. 步骤

2.1 步骤一:获取指定日期的 Calendar 对象

java.util.Calendar 类是表示日历的抽象类。它提供了许多静态工厂方法来获取实例, 例如 getInstance() 返回一个默认时区的当前日期和时间的 Calendar 对象。

Calendar cal = Calendar.getInstance();

使用上述代码将获取到的 Calendar 对象初始化为当前日期和时间。

将其设置为指定日期:

cal.set(Calendar.YEAR, 2019);
cal.set(Calendar.MONTH, 9); // 10月
cal.set(Calendar.DAY_OF_MONTH, 1);

2.2 步骤二:获取指定月份的天数

获取指定月份的天数需要使用 Calendar 对象的 getActualMaximum 方法。

int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

2.3 步骤三:获取指定日期是星期几

获取指定日期是星期几可以使用 Calendar 对象的 get 方法。

int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

2.4 步骤四:打印日历

在我们得到了指定月份的天数和指定日期是星期几之后,我们就可以开始打印日历了。

首先,我们需要在控制台输出星期几的头部:

System.out.println("日\t一\t二\t三\t四\t五\t六");

接下来,我们需要构造一个指定月份的日历。

for (int i = 1; i < dayOfWeek; i++) {
    System.out.print("\t");
}

for (int i = 1; i <= daysInMonth; i++) {
    System.out.print(i + "\t");
    if ((i + dayOfWeek - 1) % 7 == 0) {
        System.out.println();
    }
}
System.out.println();

在这段代码中,我们首先填补前面的空白格(即星期日到指定日期的 i-1 个字符),接着在一行内依次输出月份的日期,并在每输出七个数字后换行。

接下来,我们将以上代码整合到一个完整的 Java 程序中:

import java.util.Calendar;

public class PrintMonthCalender {

    public static void main(String[] args) {
        int year = 2019;
        int month = 9;

        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DAY_OF_MONTH, 1);

        int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

        System.out.println("日\t一\t二\t三\t四\t五\t六");
        for (int i = 1; i < dayOfWeek; i++) {
            System.out.print("\t");
        }

        for (int i = 1; i <= daysInMonth; i++) {
            System.out.print(i + "\t");
            if ((i + dayOfWeek - 1) % 7 == 0) {
                System.out.println();
            }
        }
        System.out.println();
    }

}

2.5 示例

接下来,我们看一下两个示例:

  • 示例 1

输出 2022 年 2 月的日历。

int year = 2022;
int month = 2;

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, 1);

int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i < dayOfWeek; i++) {
    System.out.print("\t");
}

for (int i = 1; i <= daysInMonth; i++) {
    System.out.print(i + "\t");
    if ((i + dayOfWeek - 1) % 7 == 0) {
        System.out.println();
    }
}
System.out.println();

输出结果:

日   一   二   三   四   五   六
        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      
  • 示例 2

输出 2021 年 11 月的日历。

int year = 2021;
int month = 11;

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, 1);

int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i < dayOfWeek; i++) {
    System.out.print("\t");
}

for (int i = 1; i <= daysInMonth; i++) {
    System.out.print(i + "\t");
    if ((i + dayOfWeek - 1) % 7 == 0) {
        System.out.println();
    }
}
System.out.println();

输出结果:

日   一   二   三   四   五   六
        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      

以上是本教程的全部内容。

相关文章