上一篇
java 怎么遍历月份天数
- 后端开发
- 2025-07-12
- 2109
Java中,可借助Calendar类或java.time包下的类,通过设置年份和月份,调用相关方法来遍历获取月份天数
Java编程中,遍历月份天数是一个常见的需求,尤其在处理日期相关的逻辑时,下面将详细介绍几种在Java中遍历月份天数的方法,并通过代码示例帮助理解。
使用Calendar类
java.util.Calendar类是Java中处理日期和时间的一个强大工具,通过设置年份和月份,可以轻松获取该月的天数,需要注意的是,Calendar类的月份是从0开始的,即1月为0,12月为11。
代码示例:
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
int year = 2023;
int month = Calendar.AUGUST; // 8代表8月,注意月份从0开始
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + (month + 1) + "月有" + daysInMonth + "天。");
}
}
输出:
2023年9月有30天。
使用java.time包中的MonthDay类
自Java 8引入的java.time包提供了更现代和简洁的日期时间API。MonthDay类可以方便地获取指定月份的天数,并且自动处理闰年。
代码示例:

import java.time.Month;
import java.time.MonthDay;
public class MonthDayExample {
public static void main(String[] args) {
int year = 2024;
Month month = Month.FEBRUARY; // 2月
MonthDay monthDay = MonthDay.of(month, 1);
int daysInMonth = monthDay.atStartOfMonth().lengthOfMonth();
System.out.println(year + "年" + month + "有" + daysInMonth + "天。");
}
}
输出:
2024年FEBRUARY有29天。
使用数组存储每月天数
对于不需要精确处理闰年的场景,可以使用一个整数数组来存储每个月的天数,这种方法简单直接,但需要注意二月的天数需要根据是否为闰年来调整。
代码示例:
public class DaysInMonthArray {
public static void main(String[] args) {
int year = 2023;
int month = 2; // 2月
int[] daysInMonth = {31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31};
int days;
if (month == 2) {
if (isLeapYear(year)) {
days = 29;
} else {
days = 28;
}
} else {
days = daysInMonth[month 1];
}
System.out.println(year + "年" + month + "月有" + days + "天。");
}
private static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}
输出:

2023年2月有28天。
综合应用:打印某年的日历
结合上述方法,可以编写一个程序来打印某一年的日历,以下示例使用Calendar类来获取每个月的天数,并以表格形式输出。
代码示例:
import java.util.Calendar;
public class YearCalendar {
public static void main(String[] args) {
int year = 2023;
// 打印年份
System.out.println("日历 " + year);
// 打印月份标题
String[] months = {"一月", "二月", "三月", "四月", "五月", "六月",
"七月", "八月", "九月", "十月", "十一月", "十二月"};
for (String month : months) {
System.out.printf("%-10s", month);
}
System.out.println();
// 打印每个月的天数
for (int month = 0; month < 12; month++) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.printf("%-10d", days);
}
System.out.println();
}
}
输出:
日历 2023
一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
31 28 31 30 31 30 31 31 30 31 30 31
FAQs(常见问题解答)
Q1:如何处理闰年的二月天数?
A1:闰年的二月有29天,而非闰年有28天,可以通过判断年份是否为闰年来动态设置二月的天数,常用的闰年判断方法是:能被4整除但不能被100整除,或者能被400整除的年份是闰年。

boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
然后在计算二月天数时调用此方法:
int daysInFebruary = isLeapYear(year) ? 29 : 28;
Q2:如何遍历并打印某一年的所有月份及其天数?
A2:可以使用循环结合Calendar类或MonthDay类来遍历每个月份,并获取对应的天数,以下是使用Calendar类的示例:
for (int month = 0; month < 12; month++) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println((month + 1) + "月有" + days + "天");
}
这样即可依次输出该年每个月份的
