При попытке рассчитать дни между двумя датами я отметил ошибку в приведенном ниже коде. Существует не так с месяц февраль,О днях между двумя датами
Вот код,
public class NewClass {
public int numberOfDays(String fromDate,String toDate)
{
java.util.Calendar cal1 = new java.util.GregorianCalendar();
java.util.Calendar cal2 = new java.util.GregorianCalendar();
StringBuffer sBuffer = new StringBuffer(fromDate);
String yearFrom = sBuffer.substring(6,10);
String monFrom = sBuffer.substring(0,2);
String ddFrom = sBuffer.substring(3,5);
int intYearFrom = Integer.parseInt(yearFrom);
int intMonFrom = Integer.parseInt(monFrom);
int intDdFrom = Integer.parseInt(ddFrom);
cal1.set(intYearFrom, intMonFrom, intDdFrom);
StringBuffer sBuffer1 = new StringBuffer(toDate);
String yearTo = sBuffer1.substring(6,10);
String monTo = sBuffer1.substring(0,2);
String ddTo = sBuffer1.substring(3,5);
int intYearTo = Integer.parseInt(yearTo);
int intMonTo = Integer.parseInt(monTo);
int intDdTo = Integer.parseInt(ddTo);
cal2.set(intYearTo, intMonTo, intDdTo);
int days = daysBetween(cal1.getTime(),cal2.getTime());
return days;
}
public int daysBetween(Date d1, Date d2)
{
return (int)((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24));
}
public static void main(String[] args) throws ParseException {
String s1 = "02-28-2015";
String s2 = "03-01-2015";
int num=numberOfDays(s1, s2);
System.out.println(num);
}
}
Если дает выше дат varialbe s1 и s2, результат 4. Но ответ неверен потому, что 2015 февраль имеет только 28 дней.
Я думаю, что проблема эта функция часть (1000 * 60 * 60 * 24)
Если кто-нибудь знает, что делать с этим, пожалуйста, обновите этот код или дать мне некоторую помощь !!!
Не делайте этого просто (int) ((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24)); это, наверное, самая ужасная вещь вы могли бы это сделать. Если вы используете Java 8, используйте новый Time API, иначе используйте JodaTime. Кроме того, 'Calendar' месяца начинаются с' 0', а не '1' ... – MadProgrammer
Спасибо за помощь –