-1

我在stackoverflow上关注了这个问题,但是当n的值大于24时它没有给我正确的答案。请给我另一个解决方案并修改这个问题。

这是代码

Date d = new Date();
Date dateBefore = new Date(d.getTime() - (25 * 24 * 3600 * 1000) );

当我检查 datebefore 值时,它显示日期Tue Nov 26 02:34:18 UTC 2013

现在,如果我将值 25 更改为 24,我会得到正确的日期,即Tue Oct 08 09:38:48 UTC 2013

4

3 回答 3

5

该值25 * 24 * 3600 * 1000太大而无法放入 anint并且计算结果为-2134967296。您需要将值指定为long-25l * 24 * 3600 * 1000例如。

于 2013-11-01T09:44:37.097 回答
5

可能有几种不同的方法可以实现这一点,最简单的不求助于 3rd 方库的方法可能是使用CalendarAPI,例如

int n = //...
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, n);
Date newDate = cal.getTime();

其中n可以是正数或负数。因此,要从当前日期减去 2 天,您需要n = -2;

您可能还想查找 Joda-Time

于 2013-11-01T09:38:36.860 回答
3

greg-449 给了你正确的答案。

仅供参考,如果您愿意使用 3rd-party Joda-Time库,这里是易于使用的代码。请参阅使用minusDays()方法的DateTime类。

org.joda.time.DateTime today = new org.joda.time.DateTime();
System.out.println("Today: " + today );

org.joda.time.DateTime dateBefore = today.minusDays(25);
System.out.println("Minus 25 days: " + dateBefore );

运行时:

Today: 2013-11-01T02:48:01.709-07:00
Minus 25 days: 2013-10-07T02:48:01.709-07:00

关于这个源代码和 Joda-Time:

// © 2013 Basil Bourque. This source code may be used freely forevery by anyone taking full responsibility for doing so.

// Joda-Time - The popular alternative to Sun/Oracle's notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/

// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310

// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601
于 2013-11-01T09:52:32.417 回答