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日期/时间之间的相同(1pm
VS
12pm
)。这是由于当天晚上开始或结束的夏令时以及“挂钟时间”损失或增加了一个小时。
如果DST不是您要(168 hours)
考虑的因素,或者您确实确实想要DST (无论挂钟时间的变化如何),那么此解决方案就可以正常工作。
否则,当您的时间7 days earlier
并非真正意味着168小时(由于DST在该时间范围内开始或结束)时,您可能需要补偿。