为什么我的约会日期未正确设定为30天?

时间:2012-12-29 22:35:17

标签: java date

我有以下内容:

    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

今天的日期,现在的价值是:美国东部时间2012年12月29日17:31:58。

这对我没有意义吗?

我正在使用util.Date。

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

您应该使用日历及其方法Calendar。添加

答案 2 :(得分:1)

如果您想使用日期,您会看到使用添加天数是各种不推荐的:

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

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

答案 3 :(得分:0)

不仅不推荐使用该构造函数,它只接受有效的日期(1-31)。

尝试使用java.util.Calendar。

答案 4 :(得分:0)

Date不应该用于此类计算。

请查看JodaTime这些事情的特殊情况。