Java儒略历开发求助:从运行参数取年份,计算各月首日星期
解决儒略历月份首日星期推导与日历换行问题
嘿,作为Java新手碰到这种日历计算的小坎太正常啦,我来一步步帮你捋清楚~
一、推导各月份首日的星期数
你说的没错,只要知道1月1日的星期,确实能算出所有月份的首日星期,核心逻辑就是利用每个月的天数累加后对7取模(毕竟一周只有7天)。
首先得明确儒略历的月份天数规则:
- 除了二月,其他月份的天数是固定的:1/3/5/7/8/10/12月31天,4/6/9/11月30天
- 儒略历的闰年规则很简单:能被4整除的年份就是闰年,闰年二月29天,平年28天
结合你导师提供的类,咱们可以写一段逻辑代码:
// 定义儒略历各月份的天数(索引0对应1月,索引1对应2月...) int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int year = Integer.parseInt(args[0]); // 从Run Arguments获取年份 // 判断儒略历闰年,调整二月天数 if (year % 4 == 0) { monthDays[1] = 29; } // 调用导师的方法获取1月1日的星期(假设返回值0=周日,1=周一...6=周六,根据实际情况调整) int currentWeekday = YourTutorsClass.getJanuaryFirstWeekday(year); System.out.println(year + "年1月1日是星期" + currentWeekday); // 循环推导剩下11个月的首日星期 for (int i = 0; i < 11; i++) { // 上月天数 + 当前星期数,对7取模得到下月首日星期 currentWeekday = (currentWeekday + monthDays[i]) % 7; // 如果你导师的星期是从1开始(1=周一,7=周日),那这里要处理0的情况: // if (currentWeekday == 0) currentWeekday = 7; System.out.println(year + "年" + (i + 2) + "月1日是星期" + currentWeekday); }
这里要注意:一定要和你导师的类返回的星期起始值对齐,如果它返回的1是周一、7是周日,那取模后得到0的时候要改成7,不然就会出错。
二、日期换行显示的实现
如果是打印日历的时候需要每行显示一周的日期,核心是跟踪当前日期对应的星期位置,每到周末就换行。举个例子,假设我们要打印某个月的日历:
// 假设已经拿到了该月的首日星期(weekday)和总天数(daysInMonth) System.out.println("日 一 二 三 四 五 六"); // 打印星期表头 // 先打印月份首日之前的空白占位 for (int i = 0; i < weekday; i++) { System.out.print(" "); // 每个位置占3个字符,保持对齐 } // 遍历打印每一天 for (int day = 1; day <= daysInMonth; day++) { System.out.printf("%2d ", day); // 格式化输出,占2个字符加空格,对齐 // 判断是否到周末(这里假设6是周六,根据你的星期起始调整) if ((weekday + day) % 7 == 0) { System.out.println(); // 换行 } } // 如果最后一行没填满一周,补一个换行避免格式混乱 if ((weekday + daysInMonth) % 7 != 0) { System.out.println(); }
这段代码的思路是:先根据首日星期打印前面的空白,然后逐个打印日期,每到第7个位置(也就是周末)就换行,最后处理末尾的换行问题,保证日历格式整齐。
内容的提问来源于stack exchange,提问作者Alan Navai




