如何检查过去的日期是否已设定?

时间:2014-04-30 01:13:41

标签: java date datetime

如果日期是将来或现在,则以下方法应返回true。与日期类似,可以是10 May 201430 Apr 2014,但过去无法设置。检查这个的正确方法是什么?这种方法有时会给出错误的结果。

public boolean isDateOk(java.sql.Date date) {
    boolean isOk = false;
    if(new GregorianCalendar().getTimeInMillis() <= date.getTime()) isOk = true;
    return isOk;
}

2 个答案:

答案 0 :(得分:3)

为什么不使用before方法

http://docs.oracle.com/javase/7/docs/api/java/util/Date.html#before(java.util.Date)

public boolean isDateOk(java.sql.Date date) {

  return (new java.util.Date ().before (date.getTime ()));

}

您还可以使用setTime使用Calendar类 http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#setTime(java.util.Date)

然后使用getYEARDAY_OF_YEAR

进行比较
 Calendar now = Calendar.getIntance ();
 Calendar dt = Calendar.getIntance ();
 dt.setTime (date.getIme());

 int nowYear = now.get(Calendar.YEAR);
 int dtYear = dt.get(Calendar.YEAR);
 int nowDOY = now.get(Calendar.DAY_OF_YEAR);
 int dtDOY = dt.get(Calendar.DAY_OF_YEAR);

 // do comparison

答案 1 :(得分:1)

问题是(很可能)您从数据库中检索java.sql.Date,在这种情况下,它将没有时间信息。 getTime返回的毫秒数表示您所在时区的午夜。

但是当你创建GregorianCalendar时,它会有几小时,几分钟,几秒和几毫秒。

因此,当您比较当天时,GregorianCalendar将始终比SQL Date大几毫秒。

要解决此问题,您可以调用日历上的set方法将小时,分钟,秒和毫秒调零。 更好的建议是在JodaTime中使用DateMidnight,或者如果你有Java 8,它是JodaTime的新内置克隆。