java.util.Date:7天前


问题内容

我在Jasper Reports中创建了一个报告,该报告仅识别java.util.Date(不是Calendar或Gregorian等)。

有没有办法在当前日期之前7天创建日期?

理想情况下,它看起来像这样:

new Date(New Date() - 7)

更新:我对此不够强调:JasperReports无法识别Java Calendar对象。


问题答案:

从现在开始:

long DAY_IN_MS = 1000 * 60 * 60 * 24;
new Date(System.currentTimeMillis() - (7 * DAY_IN_MS))

从任意Date date

new Date(date.getTime() - (7 * DAY_IN_MS))

编辑:如其他答案所指出,如果这是一个因素,则不考虑夏令时。

只是为了澄清我在谈论的限制:

对于受日光节约时间的人 ,如果7 days earlier,你的意思是,如果现在的问题是12pm noon on 14 Mar 2010,你想要的计算7 days earlier导致12pm on 7 Mar 2010,那么要小心。

该解决方案可以准确地找到日期/时间24小时* 7天= 168小时。

然而,有些人 感到惊讶 时,该解决方案发现,例如,(14 Mar 2010 1:00pm) - 7 * DAY_IN_MS 可能会
返回一个结果(7 Mar 2010 12:00pm),其中 在时区挂钟时间 不是2日期/时间之间的相同(1pmVS
12pm)。这是由于当天晚上开始或结束的夏令时以及“挂钟时间”损失或增加了一个小时。

如果DST不是您要(168 hours)考虑的因素,或者您确实确实想要DST (无论挂钟时间的变化如何),那么此解决方案就可以正常工作。

否则,当您的时间7 days earlier并非真正意味着168小时(由于DST在该时间范围内开始或结束)时,您可能需要补偿。