计算两个Java日历之间的差异

问题描述:

我试图从两个日历的差异中获得以秒为单位的时间,并知道结果是否超过一天(86400secs)。问题是有时候我会得到很大的负面价值。计算两个Java日历之间的差异

private long calcValidityDuration(XMLGregorianCalendar greg, XMLGregorianCalendar gregStart) { 


     int minEnd = greg.getMinute(); 
     int minStart = gregStart.getMinute(); 
     int hourStart = gregStart.getHour(); 
     int hourEnd = greg.getHour(); 
     int dayEnd = greg.getDay(); 
     int dayStart = gregStart.getDay(); 
     int monthStart = gregStart.getMonth(); 
     int monthEnd = greg.getMonth(); 
     int yearStart = gregStart.getYear(); 
     int yearEnd = greg.getYear(); 

     Calendar cal = new GregorianCalendar(); 
     cal.set(yearEnd, monthEnd - 1, dayEnd, hourEnd, minEnd); 
     Calendar calStart = new GregorianCalendar(); 
     calStart.set(yearStart, monthStart - 1, dayStart, hourStart, minStart); 
     long toRet = (((cal.getTimeInMillis()) - (calStart.getTimeInMillis()))/1000); 
     if(toRet >= 86400){ 
      return 86400; 
     }else{ 
      return toRet; 
     } 
} 

这里一些有问题的日期:

开始日期:30/09/16 07 结束日期:29/09/16 16

开始日期:29/09/16 16 结束日期:29/09/16 16

开始日期:30/09/16 08 结束日期:29/09/16 16

开始日期:29/09/16 16 结束日期:21/11/14 19

开始日期:29/09/16 16 结束日期:20/03/14 13

+1

您能否给我们,让您的输入的例子大的负面价值? –

+1

另外,我不知道这对你的用例是否有意义。但是当夏令时开始和结束时,您会得到不是86400秒的日子。 –

+0

请以我们可以运行它们的方式提供错误示例 - 并且已经运行它们(错误可能在那里)。不要指望我们找到一种方法将这些日期输入到算法中。 –

public static long getDistanceDay(Calendar one,Calendar two) { 

    long time1 = one.getTimeMillis(); 
    long time2 = two.getTImeMillis(); 
    long time; 

    if(time1 > time2) { 
     time = time-time2; 
    } 
    else { 
     time = time2 - time1; 
    } 
    return time/(1000*60*60*24) 
}