java.util.Date: 七天前

2022-09-01 09:09:04

我有一个在Jasper Reports中创建的报告,它只识别java.util.Date(不是日历或公历等)。

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

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

new Date(New Date() - 7)

更新:我不能强调这一点:JasperReports无法识别Java Calendar对象。


答案 1

从现在开始:

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 earlier12pm noon on 14 Mar 20107 days earlier12pm on 7 Mar 2010

此解决方案查找日期/时间正好提前 24 小时 * 7 天 = 168 小时。

但是,当此解决方案发现,例如,如果您所在时区的挂钟时间在 2 个日期/时间 (vs ) 之间不相同,则可能会返回结果,因此有些人会感到惊讶。这是由于夏令时从当晚开始或结束,而“挂钟时间”丢失或增加了一个小时。(14 Mar 2010 1:00pm) - 7 * DAY_IN_MS(7 Mar 2010 12:00pm)1pm12pm

如果 DST 不是你的一个因素,或者你确实想要完全(不管挂钟时间的变化如何),那么这个解决方案工作正常。(168 hours)

否则,您可能需要补偿您的实际含义是否正好为168小时(由于DST在该时间范围内开始或结束)。7 days earlier


答案 2

使用“日历”的工具,使用以下命令创建新的日期对象:getTime()

import java.util.GregorianCalendar;
import java.util.Date;

Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, -7);
Date sevenDaysAgo = cal.getTime();

推荐