我的程序中有以下代码:
if (expire.after(start) && expire.before(end))
//do somethig
但是此代码不包括绑定日期。
我的意思是,例如,如果开始是2014/01/15,结束是2014/01/20,过期是2014/01/20,则不考虑过期。怎么解决?
我以这种方式尝试过:
if (expire.after(start) && (expire.equals(end) || expire.before(end)))
但这不起作用,我得到相同的结果。
最佳答案
正如@assylias所述,您可以尝试!expire.after(end)
,尽管这可能还不够。如果改为使用expire.equals(end)
,则必须记住,这不仅仅是时间上的比较!在这里,您还可以比较时区信息,甚至包括区域设置等等。通常,仅将GregorianCalendar用于日期比较是不好的,因为此类型还将毫秒作为时间部分。因此,您可能必须将所有三个日历实例的整个时间部分手动设置为零(午夜,在某些日子像巴西那样会忽略时区异常),或者要好得多,您应该提取日期信息并通过以下方式比较这些详细信息:使用以下工具:
public class DateComparator implements Comparator<GregorianCalendar> {
public int compare(GregorianCalendar gcal1, GregorianCalendar gcal2) {
int y1 = gcal1.get(Calendar.YEAR);
int y2 = gcal2.get(Calendar.YEAR);
if (y1 != y2) {
return y1 - y2;
}
int m1 = gcal1.get(Calendar.MONTH);
int m2 = gcal2.get(Calendar.MONTH);
if (m1 != m2) {
return m1 - m2;
}
return gcal1.get(Calendar.DATE) - gcal2.get(Calendar.DATE);
}
}
但是,在比较日期部分时,请确保您始终具有相同的时区。
否则,您可以尝试提供类型LocalDate的JodaTime。新的Java 8中也包含类似的仅日期类型。