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      

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java打印指定年月的日历 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java获取json数组对象的实例讲解

    获取JSON数组对象是Java中常见的操作,通常在与API交互、解析数据等场景中经常需要使用。下面是步骤: 步骤 引入相关依赖 首先需要引入相关的依赖,包括JSON解析库和HTTP库,通常使用的是Jackson库和HttpClient库。 <dependencies> <dependency> <groupId>com.f…

    Java 2023年5月26日
    00
  • java信号量控制线程打印顺序的示例分享

    Java信号量是一种同步原语,用于控制线程并发访问资源的数量。Java信号量的主要作用是保护临界区,以确保在任何时刻只有特定数量的线程可以访问该区域。在这里,我们将分享一个Java信号量控制线程打印顺序的示例,该示例演示如何使用Java信号量来协调多个线程以按特定顺序打印。 1. 示例一 在这个示例中,我们将创建两个线程,一个线程负责打印奇数,另一个线程负责…

    Java 2023年5月26日
    00
  • java使用正则表达式查找包含的字符串示例

    关于Java使用正则表达式查找包含的字符串示例,可以按照以下步骤进行: 步骤一:创建Pattern对象 为了使用正则表达式,需要首先创建一个Pattern对象。可以使用Pattern类提供的静态方法compile()来实现,如下所示: Pattern pattern = Pattern.compile("要查找的正则表达式"); 正则表达…

    Java 2023年5月27日
    00
  • java线程池详解及代码介绍

    Java线程池详解及代码介绍 本文将介绍Java中的线程池,并提供代码示例。内容包括线程池的概念、线程池的优点、线程池的组成以及线程池的使用方式等。 线程池的概念 线程池是一种多线程处理的方式,它最大的特点是控制线程的数量。在多线程环境下,如果线程数量过多,会导致系统资源的浪费,而且线程的创建和销毁也需要消耗系统资源,影响系统的性能。线程池通过管理线程的创建…

    Java 2023年5月19日
    00
  • SpringMVC—配置与使用的示例

    以下是关于“SpringMVC—配置与使用的示例”的完整攻略,其中包含两个示例。 SpringMVC—配置与使用的示例 SpringMVC是Spring框架的一个模块,它是一个基于MVC(Model-View-Controller)架构的Web框架,用于构建Web应用程序。本攻略将介绍SpringMVC的配置与使用的示例。 示例1:SpringMVC…

    Java 2023年5月16日
    00
  • Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    Java中网络IO的实现方式主要有BIO、NIO、AIO三种。下面分别进行介绍。 BIO BIO即Blocking IO,阻塞式IO,是一种传输方式。BIO的特点是同步阻塞,也就是说,客户端请求到来后,服务器必须处理完该请求才能执行下一步操作,高并发下无法满足需求。使用BIO方式,可以使用Socket和ServerSocket类进行通信。 下面是一个BIO的…

    Java 2023年5月19日
    00
  • 一文详解Java线程的6种状态与生命周期

    一文详解Java线程的6种状态与生命周期 线程生命周期 Java线程的生命周期可以分为6种不同的状态:1. New(新建): 当线程对象被创建时,它处于新建状态,但还没有开始运行。2. Runnable(可运行): 当调用start()方法时,线程进入可运行状态,等待被线程调度器分派时间片得以运行。3. Blocked(阻塞): 线程被阻塞于某一个等待状态,…

    Java 2023年5月19日
    00
  • 手把手教你写Maven的archetype项目脚手架

    我来为你详细讲解“手把手教你写Maven的archetype项目脚手架”的完整攻略。 什么是Maven的archetype? Maven的archetype是一种脚手架工具,它可以帮助我们快速创建符合规范的Maven项目结构,包含必要的文件和依赖,以满足特定的需求。通常来说,一个archetype文件包含了一个或多个模板(template),这些模板用来生成…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部