Java输入指定年月,打印日历表(Calendar类的使用)

本文解析了如何使用Java Calendar类获取并输出指定年月的日历页,包括为何需要加1处理月份和减1处理星期数,并介绍了相关术语和不同地区对星期计算的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入年月,输出该月份的日历页:

import java.util.Calendar;//导入Calendar类
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Calendar calendar = Calendar.getInstance();//getInstance获取当前日期
        int y = input.nextInt(), m = input.nextInt()-1;
        calendar.set(y,m,1);//设置日期,默认为当月第一天
        int cnt = calendar.get(Calendar.DAY_OF_WEEK)-1;//返回设置的日期是当周的星期几
        for (int i = 0; i < cnt; i++) {
            System.out.printf("     ");
        }
        while(calendar.get(Calendar.MONTH) == m) {
            System.out.printf("%5d",calendar.get(Calendar.DAY_OF_MONTH));//输出是当个月的哪天
            cnt++;
            if(cnt%7==0) System.out.println();
            calendar.add(Calendar.DATE,1);//对日期加一天
        }
    }
}

在获取月份时,Calendar.MONTH + 1 的原因
Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。

在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。

你可以使用 Java 中的 `Calendar` 来获取指定年月的日历。以下是一个示例代码: ```java import java.util.Calendar; public class CalendarExample { public static void main(String[] args) { int year = 2022; int month = 1; // January (0 - 11) // Create a Calendar instance Calendar calendar = Calendar.getInstance(); // Set the year and month calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); // Get the number of days in the month int numDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); // Print the calendar System.out.println("Sun Mon Tue Wed Thu Fri Sat"); // Set the calendar to the first day of the month calendar.set(Calendar.DAY_OF_MONTH, 1); // Print the first week of the month int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; for (int i = 0; i < dayOfWeek; i++) { System.out.print(" "); } for (int i = 1; i <= 7 - dayOfWeek; i++) { System.out.printf("%3d ", i); } System.out.println(); // Print the remaining weeks of the month for (int i = 7 - dayOfWeek + 1; i <= numDays; i++) { System.out.printf("%3d ", i); if ((i + dayOfWeek - 1) % 7 == 0) { System.out.println(); } } } } ``` 在此示例中,我们使用 `Calendar.getInstance()` 方法创建了一个 `Calendar` 实例。然后,我们设置了年份和月份,并使用 `getActualMaximum()` 方法获取了该月的天数。接下来,我们打印了日历的表头,然后将日历设置为该月的第一天,并打印了第一周。最后,我们打印了剩余的周。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值