答案:使用LocalDate获取指定月首日与末日,计算首日周几并输出对应空格,按天循环打印日期,每七天换行。示例输出2024年4月日历,支持扩展高亮今日、用户输入等功能。

做一个简易日历应用,核心是获取指定月份的日期信息并格式化输出。Java提供了丰富的日期处理类,用 java.time 包中的类可以轻松实现。下面一步步教你怎么做。
1. 使用 LocalDate 获取当前月的第一天和最后一天
LocalDate 是 Java 8 引入的不可变日期类,适合处理年月日。
关键思路:先确定目标月份的第一天是星期几,再按周排列输出日历格子。示例代码:
import java.time.LocalDate; import java.time.DayOfWeek;public class SimpleCalendar { public static void printCalendar(int year, int month) { // 创建指定年月的第一天 LocalDate date = LocalDate.of(year, month, 1); // 获取该月第一天是星期几(1=周一,7=周日) DayOfWeek dayOfWeek = date.getDayOfWeek(); int firstDayOfWeek = dayOfWeek.getValue(); // 周一为1,周日为7
// 获取该月总天数 int daysInMonth = date.lengthOfMonth(); // 打印月份标题 System.out.println(" " + year + "年" + month + "月"); System.out.println("一 二 三 四 五 六 日"); // 前面空白占位(根据第一天是星期几决定) for (int i = 1; i < firstDayOfWeek; i++) { System.out.print(" "); } // 打印每一天 for (int day = 1; day <= daysInMonth; day++) { System.out.printf("%2d ", day); // 每到周日换行 if ((day + firstDayOfWeek - 1) % 7 == 0) { System.out.println(); } } // 最后换行 System.out.println(); }}
2. 调用并测试日历打印
在 main 方法中调用 printCalendar,传入想要查看的年月。
立即学习“Java免费学习笔记(深入)”;
public static void main(String[] args) { printCalendar(2024, 4); // 输出2024年4月的日历 }输出效果类似:
2024年4月 一 二 三 四 五 六 日 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 303. 可选增强功能
你可以扩展这个简易日历,让它更实用:
- 高亮今天:判断当前 day 是否等于系统今天的年月日,是则加标记
- 交互输入年月:用 Scanner 让用户输入要查看的年月
- 支持左右翻月:输入“上一月”或“下一月”动态切换
- 美化对齐:使用 String.format 或制表符优化显示
4. 注意事项
使用 java.time 时不需要额外依赖,Java 8+ 原生支持。避免使用已废弃的 Date 和 Calendar 类,LocalDate 更清晰安全。
关键是理解“第一天是星期几”决定了前面空几个格子,之后每天递增,每七天换行。
基本上就这些,不复杂但容易忽略细节。










