计算两个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
答
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)
}
您能否给我们,让您的输入的例子大的负面价值? –
另外,我不知道这对你的用例是否有意义。但是当夏令时开始和结束时,您会得到不是86400秒的日子。 –
请以我们可以运行它们的方式提供错误示例 - 并且已经运行它们(错误可能在那里)。不要指望我们找到一种方法将这些日期输入到算法中。 –