如何打印月份与星期几?未来生日日期输出的代码求助
修正Java代码实现未来生日的月份与星期几打印
我看了你的代码,问题主要出在LocalDate的不可变性处理上,还有输出格式的调整。咱们一步步来修正:
问题分析
- LocalDate是不可变类:你调用
myBirthday.plusYears(i)后,没有把返回的新日期对象重新赋值给变量,导致循环里一直用的是初始的2018年6月1日,根本没拿到未来年份的生日。 - 输出格式不符合需求:你现在打印了年份,但你想要的是类似“十二月 星期一”的月份+星期几格式,需要调整输出内容。
修正后的代码
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
相关产品推荐
相关产品推荐

