Java的LocalDate API调用带有长plus(...)
的{{1}}时似乎给出了错误的答案,这是我犯了一个错误。我在这里做错什么了吗?
Period
答案 0 :(得分:21)
test.c: In function ‘main’:
test.c:18:9: error: lvalue required as unary ‘&’ operand
t = &(X(a, s));
^
由很多年,几个月和几天组成。对于您来说,Period
是26岁7个月12天。
如果将其添加到Period.between(birthA, eventA)
,则会得到:
按预期工作。
如果应用相同的计算,从1992年5月9日开始,您将获得2018年12月21日。
如果要添加一定天数,则不能简单地添加期限(因为年份和月份并不总是相同的长度)。一种选择是改为使用birthA
:
ChonoUnit.DAYS.between
返回LocalDate halfA = eventA.plusDays(ChronoUnit.DAYS.between(birthA, eventA));
,我认为这是您所期望的。
答案 1 :(得分:7)
为补充亚述的答案,下面是一个简化的示例来说明为什么会发生这种情况:
public static void main(String[] args)
{
LocalDate a = LocalDate.of(1992, Month.APRIL, 1);
LocalDate b = LocalDate.of(1992, Month.MAY, 1);
// Calculate the period. It will return "One month"
Period period = Period.between(a, b);
// Add one month to b. It will return June 1, 1992
LocalDate c = b.plus(period);
System.out.println(ChronoUnit.DAYS.between(a, b)); // 30 days as April has 30 days
System.out.println(ChronoUnit.DAYS.between(b, c)); // 31 days as May has 31 days
}