Расчет разницы в днях между датами

В моем коде разница между датами неверна, потому что она должна составлять 38 дней вместо 8 дней. Как я могу исправить?

package random04diferencadata;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Random04DiferencaData {

    /**
     * http://www.guj.com.br/java/9440-diferenca-entre-datas
     */
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm dd/mm/yyyy");
        try {
            Date date1 = sdf.parse("00:00 02/11/2012");
            Date date2 = sdf.parse("10:23 10/12/2012");
            long differenceMilliSeconds = date2.getTime() - date1.getTime();
            System.out.println("diferenca em milisegundos: " + differenceMilliSeconds);
            System.out.println("diferenca em segundos: " + (differenceMilliSeconds / 1000));
            System.out.println("diferenca em minutos: " + (differenceMilliSeconds / 1000 / 60));
            System.out.println("diferenca em horas: " + (differenceMilliSeconds / 1000 / 60 / 60));
            System.out.println("diferenca em dias: " + (differenceMilliSeconds / 1000 / 60 / 60 / 24));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
 millimoose03 нояб. 2012 г., 02:22
Для такого рода расчетов вы можете использоватьJodaTime, Вы можете создатьInterval экземпляр для представления пары с / на даты, затем используйтеinterval.toPeriod().getDays()
 Hugues03 сент. 2014 г., 20:52
Смотрите мой ответ в аналогичной теме:stackoverflow.com/a/25651619/920345

Ответы на вопрос(1)

Решение Вопроса

SimpleDateFormat переменная. Месяцы представлены Столицей М.

Попробуйте изменить на:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm dd/MM/yyyy");

Для больше, посмотрите этоJavadoc.

Отредактировано:

А вот код, если вы хотите напечатать разницу так, как вы прокомментировали:

    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm dd/MM/yyyy");
    try {
        Date date1 = sdf.parse("00:00 02/11/2012");
        Date date2 = sdf.parse("10:23 10/12/2012");
        long differenceMilliSeconds = date2.getTime() - date1.getTime();
        long days = differenceMilliSeconds / 1000 / 60 / 60 / 24;
        long hours = (differenceMilliSeconds % ( 1000 * 60 * 60 * 24)) / 1000 / 60 / 60;
        long minutes = (differenceMilliSeconds % ( 1000 * 60 * 60)) / 1000 / 60;
        System.out.println(days+" days, " + hours + " hours, " + minutes + " minutes.");
    } catch (ParseException e) {
        e.printStackTrace();
    }

Надеюсь, это поможет вам!

 Regis da Silva03 нояб. 2012 г., 02:32
А как вернуть 38 дней, 10 часов и 23 минуты.
 Renato Lochetti03 нояб. 2012 г., 02:46
@RegisdaSilva: см. Редактирование в моем ответе
 MadProgrammer03 нояб. 2012 г., 02:38
@RegisdaSilva Если вы 'Вы не заинтересованы в написании вашего парсера, вы можете найтиPrettyTime использования
 Regis da Silva03 нояб. 2012 г., 02:50
Отлично, @RenatoLochetti спасибо!

Ваш ответ на вопрос