为什么我的日期没有正确设置为未来30天?

  • 本文关键字:设置 未来 30天 日期 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

今天的日期,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,它非常适合做这些事情。

最新更新