我的程序中有以下代码:

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中也包含类似的仅日期类型。

10-08 19:03