从现在开始:
long DAY_IN_MS = 1000 * 60 * 60 * 24;
new Date(System.currentTimeMillis() - (7 * DAY_IN_MS))
从任意日期日期:
new Date(date.getTime() - (7 * DAY_IN_MS))
编辑:正如其他答案所指出的,不考虑夏令时,如果这是一个因素.
只是为了澄清我在说的限制:
对于受夏令时影响的人士,如果是早于7天前的话,则表示如果现在是2010年3月14日中午12点,那么您希望在2010年3月7日下午12点之前计算7天的时间,然后小心.
此解决方案查找日期/时间正好24小时* 7天= 168小时前.
然而,有些人感到惊讶,当这个解决方案发现,例如(2010年3月14日下午1点) – 7 * DAY_IN_MS可能会返回结果(2010年3月7日中午12:00),您所在时区的挂钟时间是在两个日期/时间(下午1点到12点)之间是相同的.这是由于当天晚上开始或结束的夏令时,“挂钟时间”丢失或获得一小时.
如果DST不是您的一个因素,或者如果您确实想要(168小时)(无论挂钟时间如何变化),则此解决方案都可以正常运行.
否则,您可能需要补偿当您7天前并不意味着168小时(由于DST在该时间段内开始或结束).