首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.util.Date:七天前

java.util.Date:七天前
EN

Stack Overflow用户
提问于 2011-02-05 04:35:51
回答 11查看 66.6K关注 0票数 31

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

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

理想情况下,它应该是这样的:

代码语言:javascript
复制
new Date(New Date() - 7)

更新:我再怎么强调也不为过: JasperReports不能识别Java Calendar对象。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-02-05 04:41:42

从现在开始:

代码语言:javascript
复制
long DAY_IN_MS = 1000 * 60 * 60 * 24;
new Date(System.currentTimeMillis() - (7 * DAY_IN_MS))

从任意Date date

代码语言:javascript
复制
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小时(由于在该时间范围内开始或结束)。

票数 59
EN

Stack Overflow用户

发布于 2011-02-05 04:38:19

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

代码语言:javascript
复制
import java.util.GregorianCalendar;
import java.util.Date;

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

Stack Overflow用户

发布于 2011-02-05 04:38:25

试一试

代码语言:javascript
复制
 Date sevenDay = new Date(System.currentTimeMillis() - 7L * 24 * 3600 * 1000));

另一种方式是使用日历,但我自己不喜欢使用它。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4902653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档