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

如何打印月份与星期几?未来生日日期输出的代码求助

修正Java代码实现未来生日的月份与星期几打印

我看了你的代码,问题主要出在LocalDate的不可变性处理上,还有输出格式的调整。咱们一步步来修正:

问题分析

  1. LocalDate是不可变类:你调用myBirthday.plusYears(i)后,没有把返回的新日期对象重新赋值给变量,导致循环里一直用的是初始的2018年6月1日,根本没拿到未来年份的生日。
  2. 输出格式不符合需求:你现在打印了年份,但你想要的是类似“十二月 星期一”的月份+星期几格式,需要调整输出内容。

修正后的代码

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;

public class BirthdayPrinter {
    public static void main(String[] args) {
        // 初始化你的生日日期
        LocalDate myBirthday = LocalDate.of(2018, 6, 1);
        System.out.println("My next 10 birthdays:");
        
        for (int i = 0; i < 10; i++) {
            // 计算第i年后的生日,必须接收返回的新对象(因为LocalDate不可变)
            LocalDate futureBirthday = myBirthday.plusYears(i);
            // 获取中文的完整月份名称
            String month = futureBirthday.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINESE);
            // 获取中文的完整星期几名称
            String dayOfWeek = futureBirthday.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE);
            // 按你要的格式输出
            System.out.println(month + " " + dayOfWeek);
        }
    }
}

关键说明

  • 处理不可变对象:每次调用plusYears(i)都会生成一个新的LocalDate实例,我们把它赋值给futureBirthday,这样循环的每一次都能得到对应年份的生日日期。
  • 中文格式化:通过getDisplayName()方法,结合Locale.CHINESE,可以把月份和星期几转换成你例子里的中文全称。如果需要英文的话,把Locale.CHINESE改成Locale.ENGLISH就行。
  • 循环逻辑:i从0到9,刚好覆盖当前生日到第9年后的生日,一共10个结果,符合你要的“next 10 birth days”的需求。

运行这段代码后,你就能得到类似“六月 星期五 六月 星期六 ...”这样的输出啦。

内容的提问来源于stack exchange,提问作者Matiwos Hailegiorgis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:22