用户输入的日期正在使用一个下拉菜单分别为日,月和年。我必须比较用户输入的日期和今天的日期,并检查它是同一天还是未来的日子。我对时间部分有点困惑,因为我对时间不感兴趣,只是日期。如何解决这个问题,而不使用Date类(我读它不建议使用Date类)。使用日历类使用java比较日期
谢谢。
用户输入的日期正在使用一个下拉菜单分别为日,月和年。我必须比较用户输入的日期和今天的日期,并检查它是同一天还是未来的日子。我对时间部分有点困惑,因为我对时间不感兴趣,只是日期。如何解决这个问题,而不使用Date类(我读它不建议使用Date类)。使用日历类使用java比较日期
谢谢。
您首先需要创建GregorianCalendar
实例表示输入的日期:
Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);
,一个针对“现在”:
Calendar now = new GregorianCalendar();
这将产生积极的价值,如果日期是在未来的和消极的 - 如果过去:
user.compareTo(now);
关于构造的几点注意事项user
对象:
+1有趣的是,我不知道compareTo会这么做。好的答案! – ChadNC
试试这个解决方案:
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;
}
,将返回你的天数之差。
尝试库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
的可能重复[对比Java中两个日期] (HTTP://计算器。com/questions/3144387/compare-two-dates-in-java) – Andrew