You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java(NetBeans)日历开发问题:星期表头与年月显示异常

解决Java日历程序的三个常见问题

嘿,我刚看完你的问题,正好之前也折腾过类似的日历小工具,给你一步步拆解解决思路:

1. 让星期表头和日期正确对齐

首先,你得先单独打印星期表头,比如:

System.out.println("Sun  Mon  Tue  Wed  Thu  Fri  Sat");

接下来关键是计算当月第一天是星期几,然后在日期前面补足够的空格,让第一个日期刚好卡到表头的对应位置。用Calendar类的话可以这么做:

Calendar calendar = Calendar.getInstance();
calendar.set(year, month, 1); // 定位到当月第一天
int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 返回1=周日,2=周一...7=周六

// 根据第一天的星期数,打印前置空格(每个占位占4个字符,和日期格式对齐)
for (int i = 1; i < firstDayOfWeek; i++) {
    System.out.print("    ");
}

之后再开始循环打印当月的所有日期,这样日期就会乖乖对应到表头下面啦。

2. 修复重复打印每月第一天的问题

这个大概率是循环逻辑里的小疏忽——你可能在循环开始前先打印了一次第一天,然后循环里又重复打印了一遍。举个错误的例子:

// 错误示例:重复打印第一天
System.out.printf("%4d", calendar.get(Calendar.DATE)); // 先打了一次第一天
while (calendar.get(Calendar.MONTH) == month) {
    System.out.printf("%4d", calendar.get(Calendar.DATE)); // 循环里又打了一次
    calendar.add(Calendar.DATE, 1);
}

修正方法很简单,把前置的打印语句删掉,直接在循环里处理:

// 正确写法
while (calendar.get(Calendar.MONTH) == month) {
    System.out.printf("%4d", calendar.get(Calendar.DATE));
    // 每打印7个日期换行,保持日历的网格格式
    if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
        System.out.println();
    }
    calendar.add(Calendar.DATE, 1);
}

检查下你的代码里是不是有多余的打印第一天的语句,删掉就搞定了。

3. 在顶部显示月份和年份

这个超容易实现,只需要在打印星期表头之前,输出月份和年份的信息就行。用Calendar的getDisplayName可以拿到月份的英文全称:

// 先定位到当月第一天(假设你已经有year和month变量)
calendar.set(year, month, 1);
// 打印顶部标题,加个换行让格式更清爽
System.out.println("\n" + calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH) + " " + calendar.get(Calendar.YEAR));
// 然后再打印星期表头和日期...

如果用的是Java 8+的LocalDate,代码会更简洁:

LocalDate date = LocalDate.of(year, month + 1, 1); // 注意LocalDate的月份是1-12
System.out.println("\n" + date.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH) + " " + date.getYear());

一定要确保这段代码只执行一次,别放在打印日期的循环里,不然每个日期上面都会重复打一遍年月。

要是还有格式对齐的小问题,你可以调整printf的占位符宽度,比如%4d是占4个字符,保证每个日期和表头的格子完全对应上。

内容的提问来源于stack exchange,提问作者Lounie Germain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:03:40