2015-03-11 5 views
0

При попытке рассчитать дни между двумя датами я отметил ошибку в приведенном ниже коде. Существует не так с месяц февраль,О днях между двумя датами

Вот код,

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)

Если кто-нибудь знает, что делать с этим, пожалуйста, обновите этот код или дать мне некоторую помощь !!!

+3

Не делайте этого просто (int) ((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24)); это, наверное, самая ужасная вещь вы могли бы это сделать. Если вы используете Java 8, используйте новый Time API, иначе используйте JodaTime. Кроме того, 'Calendar' месяца начинаются с' 0', а не '1' ... – MadProgrammer

+0

Спасибо за помощь –

ответ

0

Никогда не пытайтесь использовать разницу в миллисекундах между двумя временами, чтобы рассчитать различия, есть только много особенностей с расчетами даты/времени, которые могут вызывать всевозможные ошибочные ошибки.

Вместо этого, сохранить себя (много) времени и использовать специальную библиотеку

Java 8

LocalDate start = LocalDate.of(2015, Month.JANUARY, 1); 
LocalDate end = LocalDate.now(); 

long days = ChronoUnit.DAYS.between(start, end); 
System.out.println(days); 

Какие выходы 69

JodaTime

DateTime startDate = new DateTime(2015, DateTimeConstants.JANUARY, 1, 0, 0); 
DateTime endDate = new DateTime(); 

Days d = Days.daysBetween(startDate, endDate); 
int days = d.getDays(); 
System.out.println(days); 

который выводит 69

+0

Я пробовал Joda TIme, и это хорошо работает, спасибо за все советы. –

Смежные вопросы