即时加负值
Instant plus with negative values
我有这个代码
Instant now = Instant.now();
if (amountDays >= 0) {
now = now.plus(amountDays, ChronoUnit.DAYS);
} else {
now = now.minus(Math.abs(amountDays), ChronoUnit.DAYS);
}
我想像这样简化它
Instant now = Instant.now();
now = now.plus(amountDays, ChronoUnit.DAYS);
但是,我不确定 plus
是否可以正确处理负值,或者是否会弄乱结果。
我可以像那样使用 plus
吗?
看看minus
是如何实现的
@Override
public Instant minus(long amountToSubtract, TemporalUnit unit) {
return (amountToSubtract == Long.MIN_VALUE ? plus(Long.MAX_VALUE, unit).plus(1, unit) : plus(-amountToSubtract, unit));
}
当然,为了可读性,在适当的情况下同时使用 plus
和 minus
是有意义的,但是检查 amountDays
是否大于或小于 0
似乎是某种内部 Instant.plus
逻辑,并且 deifinitely 无助于提高代码的可读性
plus
具有负值
plus
方法支持添加负时间以返回过去,来自其 documentation:
amountToAdd - the amount of the unit to add to the result, may be negative
一切顺利,您可以像这样使用它,它会按预期工作。
实施
小知识,minus
的current implementation甚至以-amountToSubtract
为值委托给plus
:
return (amountToSubtract == Long.MIN_VALUE
? plus(Long.MAX_VALUE, unit).plus(1, unit)
: plus(-amountToSubtract, unit));
注释
一般来说,如果您只是想回到过去,为了便于阅读,更喜欢使用 minus
。
在您的特定情况下,我会坚持只使用 plus
,但不会不必要地膨胀代码和逻辑。相反,更喜欢添加评论
// amountDays may be negative
或确保您的 javadoc 清楚这一点。
小改进,您可以将代码从两个语句简化为一个:
Instant now = Instant.now().plus(amountDays, ChronoUnit.DAYS);
我有这个代码
Instant now = Instant.now();
if (amountDays >= 0) {
now = now.plus(amountDays, ChronoUnit.DAYS);
} else {
now = now.minus(Math.abs(amountDays), ChronoUnit.DAYS);
}
我想像这样简化它
Instant now = Instant.now();
now = now.plus(amountDays, ChronoUnit.DAYS);
但是,我不确定 plus
是否可以正确处理负值,或者是否会弄乱结果。
我可以像那样使用 plus
吗?
看看minus
是如何实现的
@Override
public Instant minus(long amountToSubtract, TemporalUnit unit) {
return (amountToSubtract == Long.MIN_VALUE ? plus(Long.MAX_VALUE, unit).plus(1, unit) : plus(-amountToSubtract, unit));
}
当然,为了可读性,在适当的情况下同时使用 plus
和 minus
是有意义的,但是检查 amountDays
是否大于或小于 0
似乎是某种内部 Instant.plus
逻辑,并且 deifinitely 无助于提高代码的可读性
plus
具有负值
plus
方法支持添加负时间以返回过去,来自其 documentation:
amountToAdd - the amount of the unit to add to the result, may be negative
一切顺利,您可以像这样使用它,它会按预期工作。
实施
小知识,minus
的current implementation甚至以-amountToSubtract
为值委托给plus
:
return (amountToSubtract == Long.MIN_VALUE
? plus(Long.MAX_VALUE, unit).plus(1, unit)
: plus(-amountToSubtract, unit));
注释
一般来说,如果您只是想回到过去,为了便于阅读,更喜欢使用 minus
。
在您的特定情况下,我会坚持只使用 plus
,但不会不必要地膨胀代码和逻辑。相反,更喜欢添加评论
// amountDays may be negative
或确保您的 javadoc 清楚这一点。
小改进,您可以将代码从两个语句简化为一个:
Instant now = Instant.now().plus(amountDays, ChronoUnit.DAYS);