java控制台打印本月的日历

yizhihongxing

下面我来详细讲解一下如何使用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 Tomcat和激活MyEclips的深入理解

    基于Java Tomcat和激活MyEclipse的深入理解攻略 1. 安装Java Tomcat Java Tomcat是一款开源的Web服务器,支持Servlet和JavaServer Pages(JSP)技术。安装Java Tomcat十分简单,我们只需要到官网下载页面,下载我们需要的版本,然后解压即可。 2. 激活MyEclipse MyEclips…

    Java 2023年6月2日
    00
  • Java SpringBoot开发小技巧详解

    JavaSpringBoot开发小技巧详解 简介 Java Spring Boot是一种轻量级开发框架,可以简化Java Web应用程序的开发过程。在Spring Boot中,许多常见的配置都可以自动配置,从而使得开发者可以专注于业务逻辑而不必浪费太多时间在初始化过程上。本文将介绍几个在Java Spring Boot开发中常用的小技巧,以及它们的使用方法。…

    Java 2023年5月15日
    00
  • Java日期工具类操作字符串Date和LocalDate互转

    让我来详细讲解一下“Java日期工具类操作字符串Date和LocalDate互转”的攻略: 1. Date和LocalDate互转的原理 在Java中,Date和LocalDate是两种表示日期的方式,Date是旧版的日期工具类,而LocalDate是Java8之后新增的日期工具类。它们之间的区别主要在于精度和使用方式上。 Date表示的精度是毫秒级别的时间…

    Java 2023年5月20日
    00
  • 一名Java高级工程师需要学什么?

    作为一名Java高级工程师,需要掌握以下技能和知识: 1. Java核心技术 Java核心技术是Java开发的基础,包括Java SE、Java EE、Java ME等。Java SE是Java标准版,包括Java语言基础、集合框架、IO、多线程、反射、注解等。Java EE是Java企业版,包括Servlet、JSP、EJB、JPA、JMS、Web Ser…

    Java 2023年5月18日
    00
  • 小程序中读取腾讯文档的表格数据的实现

    小程序中读取腾讯文档的表格数据的实现可以分为以下几个步骤: 1. 创建小程序并获取腾讯文档API权限 首先需要使用微信开发者工具创建一个小程序并获取腾讯文档API权限。可以通过微信开发者工具的云开发功能来进行配置。 2. 获取腾讯文档的accessToken 在小程序中使用腾讯文档API需要先获取该文档的accessToken。可以按照以下步骤获取: 在腾讯…

    Java 2023年5月23日
    00
  • Java制作验证码的完整实例代码

    首先需要了解什么是验证码,验证码是一种防止机器自动化操作的机制,通常用于表单提交、用户登录等场景中。Java可以通过生成随机数、加密算法等方式来制作验证码。 制作验证码的完整实例代码和步骤如下。 步骤一:引入依赖 我们使用Java的Spring框架,所以需要引入相应的依赖库,包括Spring MVC和Apache Commons Codec等。 <de…

    Java 2023年5月30日
    00
  • Spring Data Jpa 中原生查询 REGEXP 的使用详解

    下面是关于“Spring Data Jpa 中原生查询 REGEXP 的使用详解”的完整攻略。 什么是 Spring Data Jpa Spring Data Jpa 是 Spring Data 家族中的一员,它简化了对关系型数据库的访问,使得开发人员可以更方便地使用 JPA 来访问数据库。相比于原生 JPA,Spring Data Jpa 提供了更高层次的…

    Java 2023年6月3日
    00
  • 如何用Java实现排列组合算法

    下面是关于如何用Java实现排列组合算法的完整攻略: 排列组合算法实现 什么是排列与组合 排列是指选出m个元素,一次排成一个列,有序的称为$m$的排列,记为$A_m^n$ 组合是指选出m个元素,无序的称为${m}$的组合,记作$C_m^n$ 可以发现,排列与组合的关联非常大,在代码实现中,它们也是联系在一起的。 排列算法实现 递归算法 通过递归实现简单,下面…

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