如果日期是将来或现在,则以下方法应返回true
。与日期类似,可以是10 May 2014
或30 Apr 2014
,但过去无法设置。检查这个的正确方法是什么?这种方法有时会给出错误的结果。
public boolean isDateOk(java.sql.Date date) {
boolean isOk = false;
if(new GregorianCalendar().getTimeInMillis() <= date.getTime()) isOk = true;
return isOk;
}
答案 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)
然后使用get
与YEAR
和DAY_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的新内置克隆。