1

我有以下内容:

    Date now = new Date();
    Date futureDate = new Date(now.getYear(), now.getMonth(), now.getDay() + 30);

我想根据当前日期(现在)将未来日期值设置为未来 30 天。

当我调试它时,现在是正确的日期,而 futureDate 是:

Sat Jan 05 00:00:00 EST 2013

今天的日期,now 的值为:Sat Dec 29 17:31:58 EST 2012。

这对我来说没有意义吗?

我正在使用 util.Date。

4

5 回答 5

7

因为getDay()返回一周中的某一天,而不是一个月中的某一天。

所以你的

now.getDay() + 30

变为星期六 + 30 = 6 + 30 = 12 月 36 日 = 1 月 5 日

一个快速的解决方法是将您的代码替换为:

now.getDate() + 30

但正如其他人已经建议的那样,java.util.Date它有点被弃用。你应该使用Calendar.add(). 所以你的代码会变成这样:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, +30);
于 2012-12-29T22:37:48.413 回答
4

您应该使用 Calendar 及其方法Calendar .add

于 2012-12-29T22:38:31.470 回答
1

如果你想使用日期,你会看到添加天数的工作已经被各种弃用:

http://docs.oracle.com/javase/7/docs/api/java/util/Date.html

改为使用new Date(now.getTime() + (MILLISECONDS_IN_DAY * 30))。或者,如果您不喜欢日期,请使用日历。

于 2012-12-29T22:46:35.857 回答
0

该构造函数不仅已弃用,而且仅接受有效日期(1-31)。

尝试改用 java.util.Calendar。

于 2012-12-29T22:39:40.380 回答
0

Date不应该用于此类计算。

看看JodaTime,它对此类事情非常有用。

于 2012-12-29T22:41:49.773 回答