java.util.Date:七天前

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

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

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

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

new Date(New Date() - 7)

我无法强调这一点:JasperReports不能识别Java日历对象。

提问于
用户回答回答于

从现在开始:

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小时的日期/时间。

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

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

否则,您可能需要补偿什么时候你的7 days earlier真正意思不是完全意味着168小时(由于DST在该时间范围内开始或结束)。

用户回答回答于

使用日历的工具来创建新的日期对象getTime()

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

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

扫码关注云+社区