Java 月的第31天(8月)
以下代码计算孩子从幼儿园毕业的确切日期。它总是在6岁生日后的8月31日。dob是孩子的生日:Java 月的第31天(8月),java,jodatime,Java,Jodatime,以下代码计算孩子从幼儿园毕业的确切日期。它总是在6岁生日后的8月31日。dob是孩子的生日: public static DateMidnight getKigaAustritt(DateMidnight dob){ DateMidnight sechs = dob.plus(Period.years(6)); DateMidnight austritt = new DateMidnight(sechs); if (sechs.getMonthOfYear() >
public static DateMidnight getKigaAustritt(DateMidnight dob){
DateMidnight sechs = dob.plus(Period.years(6));
DateMidnight austritt = new DateMidnight(sechs);
if (sechs.getMonthOfYear() > Month.AUGUST){
austritt = sechs.withYear(sechs.getYear()+1);
austritt = sechs.withMonthOfYear(Month.AUGUST);
austritt = sechs.withDayOfMonth(31);
}else{
austritt = sechs.withMonthOfYear(Month.AUGUST);
austritt = sechs.withDayOfMonth(31);
}
return austritt;
}
现在,如果我把它放在这里,这个方法是从其他地方调用的,我总是会得到一个错误,指出dayOfMonth()必须在[1,30]范围内。如果我将代码更改为..withDayOfMonth(30),程序运行良好,但提前一天让孩子毕业。现在,蒙托夫已经是8月份了,我想知道为什么会发生这种情况。有什么提示吗?问题是没有设置“秒”的月份。这是因为您正在调用
sechs.withMonthOfYear
,但将其分配给austritt
withMonthOfYear
返回一个修改过的副本,它不会修改调用它的元素。考虑以下事项:
austritt = sechs.withYea(...)
.withMonthOfYear(...)
.withDayOfMonth(...);
返回此日期的副本,并更新“月日”字段
DateMidnight是不可变的,因此没有set方法。相反,此方法返回一个新实例,该实例的值为“已更改的月份天数”
问题是没有设置“秒”的月份。这是因为您正在调用
sechs.withMonthOfYear
,但将其分配给austritt
withMonthOfYear
返回一个修改过的副本,它不会修改调用它的元素。考虑以下事项:
austritt = sechs.withYea(...)
.withMonthOfYear(...)
.withDayOfMonth(...);
返回此日期的副本,并更新“月日”字段
DateMidnight是不可变的,因此没有set方法。相反,此方法返回一个新实例,该实例的值为“已更改的月份天数”
问题是
with*()
返回日期的新实例
您需要使用*()执行sechs=sechs
然后返回sechs。问题是with*()
返回一个新的日期实例
您需要使用*()
执行sechs=sechs
然后再回来。Wenn schon,dann sollten die Variablen Englishe Namen haben!你觉得英语练习场怎么样?我是一位编辑。在编译器中,一切看起来都是一样的,Java甚至可以处理Unicode:)Wenn schon,dann sollten die Variablen Englishche Namen haben!你觉得英语练习场怎么样?我是一位编辑。在编译器中看起来都一样,Java甚至可以处理Unicode:)明白了。事实上我知道DateMidnight Being是不可变的,但我完全没有看到这里的参考文献。谢谢,明白了。事实上我知道DateMidnight Being是不可变的,但我完全没有看到这里的参考文献。谢谢