用户输入的日期分别使用日、月和年的下拉菜单。我必须将用户输入的日期与今天的日期进行比较,并检查它是同一天还是未来一天。我对时间部分有点困惑,因为我对时间不感兴趣,只对日期感兴趣。如何在不使用 Date 类的情况下解决这个问题(我读过不建议使用 Date 类)。
谢谢。
用户输入的日期分别使用日、月和年的下拉菜单。我必须将用户输入的日期与今天的日期进行比较,并检查它是同一天还是未来一天。我对时间部分有点困惑,因为我对时间不感兴趣,只对日期感兴趣。如何在不使用 Date 类的情况下解决这个问题(我读过不建议使用 Date 类)。
谢谢。
您首先需要创建GregorianCalendar
代表输入日期的实例:
Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);
还有一个“现在”:
Calendar now = new GregorianCalendar();
如果日期在未来,这将产生正值,如果在过去,则为负值:
user.compareTo(now);
关于构造user
对象的几点注意事项:
尝试库 Apache Commons Lang 的类 DateUtils。
此类提供方法 truncatedEquals(cal1, cal2, field)。
因此,您可以使用一行代码检查是否相等:
Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);
Calendar now = Calendar.getInstance();
if(DateUtils.truncatedEquals(user, now, Calendar.DATE)){
// your code goes here
}
简单计算:
GregorianCalendar gc1 = new GregorianCalendar();
GregorianCalendar gc2 = new GregorianCalendar();
gc2.add(GregorianCalendar.DAY_OF_MONTH, 2); // gc2 is 2 days after gc1
long duration = (gc2.getTimeInMillis() - gc1.getTimeInMillis() )
/ ( 1000 * 60 * 60 * 24) ;
System.out.println(duration);
-> 2
试试这个解决方案:
int day = 0; //user provided
int month = 0; //user provided
int year = 0; //user provided
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONDAY, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
long millisUser = calendar.getTime().getTime();
long nowMillis = System.currentTimeMillis();
if(nowMillis < millisUser) {
...
}
以上是检查日期是否在将来。
使用没有错java.util.Date
你可以使用:
int day = 0; //user provided
int month = 0; //user provided
int year = 0; //user provided
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONDAY, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
Date userSubmit = calendar.getTime();
Date now = new Date();
if(userSubmit.after(now)) {
...
}
但是如果你想要流畅、简单和直观的 API 日期,我建议使用JodaTime
使用公历。如果您想知道两个日期之间的天数差异,那么您可以使用类似于以下的方法。
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
}
else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
while ( gc1.before(gc2) ) {
gc1.add(Calendar.DATE, 1);
elapsed++;
}
return elapsed;
}
这将返回您的天数差异。