2012-05-16 64 views
0

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

谢谢。

+1

的可能重复[对比Java中两个日期] (HTTP://计算器。com/questions/3144387/compare-two-dates-in-java) – Andrew

回答

6

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

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

,一个针对“现在”:

Calendar now = new GregorianCalendar(); 

这将产生积极的价值,如果日期是在未来的和消极的 - 如果过去:

user.compareTo(now); 

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

  • 它CEST时区使用当前JVM的时区,所以在我的情况下,它是午夜,5月17日的
  • 小心几个月,他们是从0
+0

+1有趣的是,我不知道compareTo会这么做。好的答案! – ChadNC

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

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; 

}

,将返回你的天数之差。

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 
} 
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