3

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

谢谢。

4

5 回答 5

11

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

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

还有一个“现在”:

Calendar now = new GregorianCalendar();

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

user.compareTo(now);

关于构造user对象的几点注意事项:

  • 它使用当前的 JVM 时区,所以在我的情况下,它是 CEST 时区的 5 月 17 日午夜
  • 小心月份,它们是从 0 开始的
于 2012-05-16T18:14:56.523 回答
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
}
于 2013-11-21T16:37:50.883 回答
1

简单计算:

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

于 2018-03-08T16:15:18.027 回答
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

于 2012-05-16T18:17:53.300 回答
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;

}

这将返回您的天数差异。

于 2012-05-16T18:21:14.217 回答