首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Month.AUGUST中的dayOfMonth(31)

Month.AUGUST中的dayOfMonth(31)
EN

Stack Overflow用户
提问于 2011-11-03 22:05:24
回答 2查看 1.1K关注 0票数 1

下面的代码计算孩子从Kindergarden毕业的确切日期。通常是6岁生日后的8月31日。道布是孩子的生日:

代码语言:javascript
复制
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),程序可以正常工作,但是提前一天让孩子毕业。现在,MonthOfYear已经是八月了,我想知道为什么会发生这样的事情。有什么提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-03 22:11:45

问题是没有设置“sechs”的月份。这是因为您正在调用sechs.withMonthOfYear,但将其分配给了austrittwithMonthOfYear返回一个修改过的副本,它不会修改调用它的元素。请考虑以下几点:

代码语言:javascript
复制
austritt = sechs.withYea(...)
                .withMonthOfYear(...)
                .withDayOfMonth(...);

每个API

返回此日期的副本,其中的日期字段已更新。

DateMidnight是不可变的,所以没有设置方法。相反,此方法返回一个值已更改的新实例。

票数 3
EN

Stack Overflow用户

发布于 2011-11-03 22:14:26

问题是with*()返回一个新的date实例。

您需要执行sechs = sechs.with*()或使用构造函数。

然后返回sechs。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7996221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档