我有以下内容:
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。
答案 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这些事情的特殊情况。