我有一个在Jasper Reports中创建的报告,它只识别java.util.Date的(不能识别日历或公历等)。
有没有办法在当前日期前7天创建一个日期?
理想情况下,它应该是这样的:
new Date(New Date() - 7)
更新:我再怎么强调也不为过: JasperReports不能识别Java Calendar对象。
发布于 2011-02-05 04:41:42
从现在开始:
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 days= 168小时。
然而,当此解决方案发现,例如,(14 Mar 2010 1:00pm) - 7 * DAY_IN_MS
可能会以返回(7 Mar 2010 12:00pm)
格式的结果时,有些人会感到惊讶,因为在这两个日期/时间之间,您的时区中的挂钟时间不相同(1pm
vs <>d18>)。这是由于当晚开始或结束的夏令时,以及“挂钟时间”损失或增加了一个小时。
如果DST对您来说不是一个因素,或者如果您确实想要(168 hours)
(不管挂钟时间的变化),那么这个解决方案可以很好地工作。
否则,您可能需要补偿当您的7 days earlier
不是真正的168小时(由于在该时间范围内开始或结束)。
发布于 2011-02-05 04:38:19
使用日历的工具通过getTime()
创建新的日期对象
import java.util.GregorianCalendar;
import java.util.Date;
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, -7);
Date sevenDaysAgo = cal.getTime();
发布于 2011-02-05 04:38:25
试一试
Date sevenDay = new Date(System.currentTimeMillis() - 7L * 24 * 3600 * 1000));
另一种方式是使用日历,但我自己不喜欢使用它。
https://stackoverflow.com/questions/4902653
复制相似问题