使用Java比较使用Calendar类的日期

时间:2012-05-16 18:10:08

标签: java

用户输入的日期分别为日,月和年使用下拉列表。我必须将用户输入的日期与今天的日期进行比较,并检查它是在同一天还是将来的某一天。我对时间部分有点困惑,因为我对时间不感兴趣,只对日期感兴趣。如何在不使用Date类的情况下解决这个问题(我不建议使用Date类)。

感谢。

5 个答案:

答案 0 :(得分:7)

首先需要创建表示输入日期的GregorianCalendar实例:

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);

一个用于“现在”:

Calendar now = new GregorianCalendar();

如果日期是未来,这将产生正值,如果是过去,则产生负值:

user.compareTo(now);

关于构建user对象的几点注释:

  • 它使用当前的JVM时区,因此在我的情况下,它是在CEST时区的5月17日午夜
  • 小心几个月,他们是0基础

答案 1 :(得分:2)

尝试使用库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
}

答案 2 :(得分:1)

简单计算:

$('.modal').css('min-height', height);

- > 2

答案 3 :(得分:0)

试试这个解决方案:

    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

答案 4 :(得分:0)

使用格里高利历。 如果您想知道两个日期之间的天数差异,那么您可以使用类似于以下的方法。

  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;

}

这会让你得到天数的差异。