获取java中的日期之间的差异

可能重复:
如何使用java计算两个日期之间的差异

我正在尝试这样的事情,我试图从combobox中获取日期

Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); int Sdate=Integer.parseInt(cmbSdate.getSelectedItem().toString()); int Smonth=cmbSmonth.getSelectedIndex(); int Syear=Integer.parseInt(cmbSyear.getSelectedItem().toString()); int Edate=Integer.parseInt(cmbEdate.getSelectedItem().toString()); int Emonth=cmbEmonth.getSelectedIndex(); int Eyear=Integer.parseInt(cmbEyear.getSelectedItem().toString()); start.set(Syear,Smonth,Sdate); end.set(Eyear,Emonth,Edate); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String startdate=dateFormat.format(start.getTime()); String enddate=dateFormat.format(end.getTime()); 

我无法减去结束日期和开始日期如何获得开始日期和结束日期之间的差异?

 Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); start.set(2010, 7, 23); end.set(2010, 8, 26); Date startDate = start.getTime(); Date endDate = end.getTime(); long startTime = startDate.getTime(); long endTime = endDate.getTime(); long diffTime = endTime - startTime; long diffDays = diffTime / (1000 * 60 * 60 * 24); DateFormat dateFormat = DateFormat.getDateInstance(); System.out.println("The difference between "+ dateFormat.format(startDate)+" and "+ dateFormat.format(endDate)+" is "+ diffDays+" days."); 

当穿过夏令时(或闰秒)时,这将无效,因为orange80指出并且在使用不同时间时可能不会给出预期结果。 使用JodaTime可能更容易获得正确的结果,因为我知道普通Java的唯一正确方法是使用Calendar的add和before / after方法来检查和调整计算:

 start.add(Calendar.DAY_OF_MONTH, (int)diffDays); while (start.before(end)) { start.add(Calendar.DAY_OF_MONTH, 1); diffDays++; } while (start.after(end)) { start.add(Calendar.DAY_OF_MONTH, -1); diffDays--; } 

使用JodaTime 。 它比标准的Java DateTime Apis要好得多。 以下是JodaTime中用于计算天数差异的代码:

 private static void dateDiff() { System.out.println("Calculate difference between two dates"); System.out.println("================================================================="); DateTime startDate = new DateTime(2000, 1, 19, 0, 0, 0, 0); DateTime endDate = new DateTime(); Days d = Days.daysBetween(startDate, endDate); int days = d.getDays(); System.out.println(" Difference between " + endDate); System.out.println(" and " + startDate + " is " + days + " days."); } 

像这样 。

 import java.util.Date; import java.util.GregorianCalendar; /** * DateDiff -- compute the difference between two dates. */ public class DateDiff { public static void main(String[] av) { /** The date at the end of the last century */ Date d1 = new GregorianCalendar(2000, 11, 31, 23, 59).getTime(); /** Today's date */ Date today = new Date(); // Get msec from each, and subtract. long diff = today.getTime() - d1.getTime(); System.out.println("The 21st century (up to " + today + ") is " + (diff / (1000 * 60 * 60 * 24)) + " days old."); } 

}

这是一篇关于Java日期算术的文章。