我有以下计算:
Stream<T> stream;
T last = Streams.findLast(stream);
2018年3月2日(今天),上述所有计算均正常。 但是,在2018年3月1日,最后三次计算出错了。 下面显示了上述两个日期的计算结果:
- 2018年3月2日(今天)
Thu Mar 01 2018 12:03:34 GMT + 0530(India Standard Time)**** 01-Mar-2018
Tue Jan 30 2018 12:03:34 GMT + 0530(India Standard Time)**** 30-Jan-2018
Thu Mar 01 2018 12:03:34 GMT + 0530(India Standard Time)**** 01-Mar-2018
2018年1月29日星期一12:03:34 GMT + 0530(印度标准时间)**** 29-Jan-2018
- 2018年3月1日(昨天)
2018年2月28日星期三12:12:32 GMT + 0530(印度标准时间)**** 28-Feb-2018
2018年2月26日星期一12:12:32 GMT + 0530(印度标准时间)****而非29-jan-2018
2018年3月28日星期三12:12:32 GMT + 0530(印度标准时间)**** 28-Feb-2018
Sun Feb 25 2018 12:12:32 GMT + 0530(印度标准时间)**** 28-jan-2018
答案 0 :(得分:0)
嗯....查找。从documentation我们现在关于.setDate(..)
下一步:
如果dayValue超出了月份的日期值范围,setDate()将相应地更新Date对象。例如,如果为dayValue提供了0,则日期将设置为上个月的最后一天。
让我们了解您的日期在3月1日会发生什么。
vCurrDate.setDate(vCurrDate.getDate() - 1);
根据setDate规范
将vCurrDate分配到2月28日之后vDueFromDate.setDate(vCurrDate.getDate() - 30);
要vDueFromDate,您可以将日期设置为28-30
或从当前日期开始的-2天。 0表示前几个月的最后一天,因此-2表示2月26日
vDueToDate.setDate(vCurrDate.getDate());
如上所述vCurrDate.getDate()
现在是28
,所以我们将vDueToDate设置为当月的28日,即3月28日。
vOverDueToDate.setDate(vCurrDate.getDate() - 31);
在这种情况下,您尝试将日期设置为当月的-3,因此,如上所述,这是2月25日