You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动