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日

相关文章

  • SpringBoot四大神器之Actuator的使用小结

    Spring Boot四大神器之Actuator的使用小结 Spring Boot Actuator是Spring Boot的一个扩展模块,提供了一组用于监控和管理Spring Boot应用程序的端点。在本文中,我们将详细讲解Actuator的使用方法和常用端点。 添加依赖 首先,我们需要在Maven项目中添加Actuator的依赖关系。我们可以使用以下依赖…

    Java 2023年5月15日
    00
  • JavaScript BASE64算法实现(完美解决中文乱码)

    下面详细讲解一下JavaScript BASE64算法实现的攻略。 什么是BASE64算法 BASE64是一种将二进制数据编码成 ASCII 字符串的算法。它主要用于在字符集不兼容的情况下,将文本数据通过电子邮件传输,或者在需要保留文本格式的情况下,将二进制数据嵌入到文本文件中。 JavaScript实现BASE64算法 下面是一个JavaScript BA…

    Java 2023年5月20日
    00
  • Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解攻略 什么是Java内省(Introspector) Java内省是指可以在运行时检查一个JavaBean的属性、方法和事件利用JavaBean的内省机制,我们可以在访问一个对象的属性时调用一些预定义的方法,从而更方便的操作对象。Java提供了一个Introspector类,通过该类我们可以取得某个JavaB…

    Java 2023年6月15日
    00
  • JS立即执行的匿名函数用法分析

    JS立即执行的匿名函数用法是前端开发中常用的技巧之一,它可以避免全局变量的污染和冲突,同时也可以保护代码的隐私性和可维护性。本文将对这种用法进行详细的分析和解释,并且提供2个示例以便读者更好地理解。 1. 立即执行函数的基本概念和语法 立即执行函数是指在定义后立即执行的一种函数,它没有名称,也无法被重复调用,一般用于创建作用域并避免变量污染。它的基本语法形式…

    Java 2023年5月26日
    00
  • Java中的异常处理如何提高程序健壮性?

    Java中异常处理是一种防御性编程的技术手段,可以应对程序中出现的不可预知的异常情况,提高程序的健壮性。 在Java中,异常是由Java虚拟机(JVM)或程序员代码抛出的对象。当程序中出现异常情况,会有一个异常对象被抛出,这个异常对象会包含一些关于异常情况的信息。程序员可以通过编写异常处理代码,捕获并处理这些异常对象。 以下是使用Java异常处理提高程序健壮…

    Java 2023年4月27日
    00
  • XML经典问答

    XML经典问答攻略 本文将为您提供针对XML经典问题的攻略,以解决常见的XML相关问题。以下是您需要注意的几个方面: 1. XML文档结构 XML文件通常由一个根元素(root element)组成,并由开始标签和结束标签加以表示。中间可以嵌套若干子元素。元素可以包含属性(attribute)或文本(text)。如下所示: <?xml version=…

    Java 2023年5月20日
    00
  • Java利用Dijkstra算法求解拓扑关系最短路径

    以下是“Java利用Dijkstra算法求解拓扑关系最短路径”的完整攻略。 1. 理解Dijkstra算法 Dijkstra算法是一种单源最短路径算法,用于计算一个节点到图中所有其他节点的最短路径。算法最早由荷兰计算机科学家狄克斯特拉于1959年提出,因此得名。该算法常用于路由算法或作为其他图算法的一个子模块。 Dijkstra算法的基本思想是从起点开始,对…

    Java 2023年5月19日
    00
  • java web学习_浅谈request对象中get和post的差异

    Java Web学习:浅谈request对象中get和post的差异攻略 在Java Web开发过程中,request对象是一个非常重要的对象。这个对象可以帮助开发者获取客户端发送的请求,进而进行相应的处理。而对于request请求方式,一般分为get和post两种方式。本攻略将详细讲解这两种方式的差异,帮助开发者更好地应用到项目实践中。 了解get和pos…

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