java控制台打印本月的日历

下面我来详细讲解一下如何使用Java控制台打印本月的日历。

1. 获取当前系统日期

在Java中,可以通过 java.util.Calendar 类获取当前系统日期。该类默认获取的日期是当前系统日期,可以使用以下代码进行获取:

Calendar cal = Calendar.getInstance();

2. 获取本月天数并确定第一天

通过 Calendar 类获取到的当前日期,可以使用 getActualMaximum 方法获取本月的天数,并使用 set 方法将当前日期设置为本月的第一天。

cal.set(Calendar.DATE, 1);
int monthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

3. 创建日历输出格式

日历的输出格式可以使用字符串拼接的方式进行创建。例如,创建一个格式为:

Sun Mon Tue Wed Thu Fri Sat
 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

可以使用以下代码进行创建:

String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
String[][] days = new String[6][7];
StringBuilder builder = new StringBuilder();

for (int i = 0; i < 7; i++) {
    builder.append(weekDays[i]).append(" ");
}
builder.append("\n");

for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 7; j++) {
        builder.append(String.format("%2s", days[i][j] == null ? "" : days[i][j])).append(" ");
    }
    builder.append("\n");
}

4. 填充日历输出格式

根据第一天的星期数,可以计算出当前日历输出格式中的第一个空位应该填充哪个日期。据此,可以使用一个二维数组来保存本月每一天的日期,然后按照星期数和日期填充到输出格式中。

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

for (int i = 0; i < monthDays; i++) {
    int row = (i + dayOfWeek) / 7;
    int col = (i + dayOfWeek) % 7;
    days[row][col] = String.valueOf(i + 1);
}

5. 完整代码示例

下面是一个完整的Java控制台打印本月日历的示例代码:

import java.util.Calendar;

public class CalendarPrinter {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DATE, 1);
        int monthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

        String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        String[][] days = new String[6][7];
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < 7; i++) {
            builder.append(weekDays[i]).append(" ");
        }
        builder.append("\n");

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
        for (int i = 0; i < monthDays; i++) {
            int row = (i + dayOfWeek) / 7;
            int col = (i + dayOfWeek) % 7;
            days[row][col] = String.valueOf(i + 1);
        }

        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                builder.append(String.format("%2s", days[i][j] == null ? "" : days[i][j])).append(" ");
            }
            builder.append("\n");
        }

        System.out.println(builder.toString());
    }
}

6. 示例输出

以下是该代码的示例输出:

Sun Mon Tue Wed Thu Fri Sat 
              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           

7. 更多示例

下面是使用不同年份和月份的代码示例,可自行参考:

示例1:2021年6月

import java.util.Calendar;

public class CalendarPrinter {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2021);
        cal.set(Calendar.MONTH, Calendar.JUNE);
        cal.set(Calendar.DATE, 1);
        int monthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

        String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        String[][] days = new String[6][7];
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < 7; i++) {
            builder.append(weekDays[i]).append(" ");
        }
        builder.append("\n");

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
        for (int i = 0; i < monthDays; i++) {
            int row = (i + dayOfWeek) / 7;
            int col = (i + dayOfWeek) % 7;
            days[row][col] = String.valueOf(i + 1);
        }

        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                builder.append(String.format("%2s", days[i][j] == null ? "" : days[i][j])).append(" ");
            }
            builder.append("\n");
        }

        System.out.println(builder.toString());
    }
}

输出结果:

Sun Mon Tue Wed Thu Fri Sat 
               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           

示例2:2022年2月

import java.util.Calendar;

public class CalendarPrinter {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2022);
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
        cal.set(Calendar.DATE, 1);
        int monthDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

        String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
        String[][] days = new String[6][7];
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < 7; i++) {
            builder.append(weekDays[i]).append(" ");
        }
        builder.append("\n");

        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
        for (int i = 0; i < monthDays; i++) {
            int row = (i + dayOfWeek) / 7;
            int col = (i + dayOfWeek) % 7;
            days[row][col] = String.valueOf(i + 1);
        }

        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                builder.append(String.format("%2s", days[i][j] == null ? "" : days[i][j])).append(" ");
            }
            builder.append("\n");
        }

        System.out.println(builder.toString());
    }
}

输出结果:

Sun Mon Tue Wed Thu Fri Sat 
           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                       

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

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

相关文章

  • java组件commons-fileupload实现文件上传

    为了更好地讲解java组件commons-fileupload实现文件上传的攻略,我将分为以下几个部分: 环境准备 引入commons-fileupload依赖 添加文件上传页面 编写SpringMVC控制器 添加配置文件 在接下来的讲解中,我将详细介绍每个部分的实现步骤和示例说明。 1. 环境准备 在使用commons-fileupload组件实现文件上传…

    Java 2023年6月15日
    00
  • Java中调用Python的实现示例

    Java和Python是两种不同的编程语言,在Java项目中,如果需要使用Python的某些功能,可以通过调用Python脚本来实现。下面是Java中调用Python的实现攻略。 环境准备 使用Java调用Python,需要先安装以下软件: Java开发工具,如Eclipse、IntelliJ IDEA或NetBeans等。 Python解释器,建议使用Py…

    Java 2023年5月26日
    00
  • 线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录

    下面我来详细讲解“线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录”的完整攻略。 问题背景 最近在自己开发的一个微服务中,使用了Dubbo框架(版本2.6.5),在线上运行时突然出现了一个严重的问题:dubbo线程池耗尽CyclicBarrier线程屏障异常。具体表现为调用Dubbo服务时,服务提供方无法及时响应请求,出现了较长时间的等…

    Java 2023年5月26日
    00
  • Java多线程之synchronized同步代码块详解

    Java多线程之synchronized同步代码块详解 什么是synchronized同步代码块? synchronized 是 Java 中的一个关键字,用来实现多线程的同步。synchronized 有两个作用:一是保证代码块只能由一个线程执行,二是保证该线程执行该代码块期间所需的所有资源都已获取。 具体地说,我们可以使用synchronized关键字来…

    Java 2023年5月18日
    00
  • Hibernate核心类和接口的详细介绍

    关于“Hibernate核心类和接口的详细介绍”的攻略如下: Hibernate 核心类和接口的详细介绍 SessionFactory SessionFactory 是 Hibernate 中最重要的类之一,用于创建 Session 对象。SessionFactory 是一个线程安全的、可被多个 Session 共用的对象。 SessionFactory 通…

    Java 2023年5月19日
    00
  • Java中的函数式编程

    下面是Java中函数式编程的完整攻略及示例。 函数式编程概述 函数式编程是一种编程范式,其核心思想是把计算机运算看作是数学上的函数计算。函数式编程的一个关键特点是它支持高阶函数,即函数可以作为另一个函数的参数或返回值。Java 8引入了Lambda表达式和函数式接口,使得Java也支持函数式编程。 Lambda表达式 Lambda表达式是Java 8引入的一…

    Java 2023年5月19日
    00
  • java 学习笔记(入门篇)_java程序helloWorld

    Java 学习笔记(入门篇)_Java程序HelloWorld 完整攻略 什么是Java Java 是一种高级编程语言,具有面向对象、跨平台、安全性强等特点,被广泛应用于互联网和企业应用等领域。 学习Java的前置知识 学习Java需要具备以下基础知识: 编程语言基础概念 面向对象编程思想 常见数据结构和算法 Java 学习的步骤 1. 下载安装Java环境…

    Java 2023年5月19日
    00
  • Mybatis对mapper的加载流程深入讲解

    下面是对”Mybatis对mapper的加载流程深入讲解”的详细讲解: 1、Mybatis mapper的概念 Mapper是Mybatis的一个核心概念,是连接Mybatis和JDBC的重要桥梁。Mybatis将SQL语句和映射规则分离出来,提供了mapper对SQL语句的注解和XML配置文件的支持,使得我们可以在mapper中定义SQL和对应的Java映…

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