我的程序中有以下代码:
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)))但是它不起作用,我得到了同样的结果。
发布于 2014-02-05 23:13:24
当我在过去做时间检查时,我总是只使用after和before,即使我的范围检查是start <= current <= end。
您可以通过调整开始日期和结束日期来实现这一点,使它们超出所需范围的范围。
例如,如果开始日期是2014/01/15,则使用开始日期值2014/01/14 23:59:59作为用于比较的实际开始日期。使用2014/01/21 00:00:00作为结束日期,而不是2014/01/20。对于这些值,您可以使用.after(startDate)和.before(endDate)。
下面是一些计算开始日期的代码:
private static Date calculateStartDate(
final int year,
final int month,
final int dayOfMonth)
{
Calendar calendar = Calendar.getInstance();
Date returnValue;
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
returnValue = calendar.getTime();
return returnValue;
}上面添加了毫秒的编辑
发布于 2014-02-05 23:19:59
正如@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);
}
}但是,在比较日期部分时,请确保始终使用相同的时区。或者,您可以尝试JodaTime,它提供了LocalDate类型。类似的仅日期类型也包含在新的Java 8中。
发布于 2014-02-05 23:15:35
或
if ((expire.compareTo(start) >= 0) && (expire.compareTo(end) <= 0))因为
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#after(java.lang.Object)
表示.before等于compareTo(when) <0,.after等于compareTo(when) >0
https://stackoverflow.com/questions/21580841
复制相似问题