Расчет количества дней между двумя датами с использованием joda time api

У меня две даты. Я получаю даты из базы данных следующим образом: -

Date d = new Date();
Date dTarget = finance.getTargetDate();

на данный момент мой d равен 2017-12-29, а dTarget равен 2017-12-31

Теперь я пытаюсь рассчитать количество дней между ними, используя API времени Joda. Я ожидаю, что количество дней будет 2, но на данный момент я получаю 1, что я считаю неправильным.

Мой часовой пояс UTC+5:45

     //joda initital datetime
    DateTime intdt = new DateTime(new Date());
    DateTime targetDt = new DateTime(dTarget);

    int noOfDays = Days.daysBetween(intdt,targetDt).getDays();
    System.out.println(noOfDays);

Правильно ли я нахожу разницу между двумя датами? Почему в этом случае не отображается 2?


person sagar limbu    schedule 29.12.2017    source источник
comment
Попробуйте это Days.daysBetween(intdt.toLocalDate(), targetDt.toLocalDate()).getDays()   -  person vts    schedule 29.12.2017
comment
Вы можете попробовать это Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays();   -  person N00b Pr0grammer    schedule 29.12.2017
comment
спасибо, после использования Localdate теперь показывает 2 дня. теперь я думаю, что правильно понимаю различия. спасибо vts и нуб-программист.   -  person sagar limbu    schedule 29.12.2017
comment
принятый ответ.   -  person sagar limbu    schedule 29.12.2017
comment
К вашему сведению, проект Joda-Time теперь находится в режим обслуживания, где команда рекомендует перейти на java.time. См. учебник Oracle.   -  person Basil Bourque    schedule 29.12.2017
comment
Пожалуйста, поищите Stack Overflow перед публикацией. Вы можете предположить, что любой базовый вопрос о дате и времени уже был задан и на него был дан ответ. Совет: java.time.temporal.ChronoUnit.DAYS.between( LocalDate.parse("2017-12-29" ) , LocalDate.parse("2017-12-31" ) ) это 2.   -  person Basil Bourque    schedule 29.12.2017


Ответы (2)


Использовать это

 Days.daysBetween(intdt.toLocalDate(), targetDt.toLocalDate()).getDays() 

Класс LocalDate не хранит и не представляет время или часовой пояс. Вместо этого это описание даты.

person vts    schedule 29.12.2017

person    schedule
comment
Пожалуйста, не учите молодежь пользоваться давно устаревшим и заведомо проблемным классом SimpleDateFormat. Тем более, когда они уже используют что-то лучшее, в данном случае Joda-Time. - person Ole V.V.; 29.12.2017
comment
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleDateFormat теперь являются устаревшими, вытесненными java.time, встроенные в Java 8 и Java 9. См. Учебник Oracle. - person Basil Bourque; 29.12.2017