java.util.Date: 七天前
2022-09-01 09:09:04
我有一个在Jasper Reports中创建的报告,它只识别java.util.Date(不是日历或公历等)。
有没有办法在当前日期之前7天创建日期?
理想情况下,它看起来像这样:
new Date(New Date() - 7)
更新:我不能强调这一点:JasperReports无法识别Java Calendar对象。
我有一个在Jasper Reports中创建的报告,它只识别java.util.Date(不是日历或公历等)。
有没有办法在当前日期之前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 小时。
但是,当此解决方案发现,例如,如果您所在时区的挂钟时间在 2 个日期/时间 (vs ) 之间不相同,则可能会返回结果,因此有些人会感到惊讶。这是由于夏令时从当晚开始或结束,而“挂钟时间”丢失或增加了一个小时。(14 Mar 2010 1:00pm) - 7 * DAY_IN_MS
(7 Mar 2010 12:00pm)
1pm
12pm
如果 DST 不是你的一个因素,或者你确实想要完全(不管挂钟时间的变化如何),那么这个解决方案工作正常。(168 hours)
否则,您可能需要补偿您的实际含义是否正好为168小时(由于DST在该时间范围内开始或结束)。7 days earlier
使用“日历”的工具,使用以下命令创建新的日期对象:getTime()
import java.util.GregorianCalendar;
import java.util.Date;
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, -7);
Date sevenDaysAgo = cal.getTime();