我有以下内容:
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.
因为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);
您应该使用Calendar及其方法Calendar.add
如果您想使用Date,您会发现添加日期是各种不赞成的:
http://docs.oracle.com/javase/7/docs/api/java/util/Date.html用new Date(now.getTime() + (MILLISECONDS_IN_DAY * 30))
代替。如果你不喜欢"日期",可以使用"日历"。
这个构造函数不仅被弃用,而且只接受有效的天数(1-31)。
Date
不应该用于这样的计算。
看一下JodaTime,它非常适合做这些事情。