Разница в днях для Java7 - PullRequest
       17

Разница в днях для Java7

0 голосов
/ 11 сентября 2018

У меня есть форматы даты: EEE, dd MMM yyyy HH:mm:ss Z

Например,

Дата 1: Пн 10 сентября 08:32:58 GMT 2018

Дата 2: Вт 11 сентября 03:56:10 GMT 2018

Мне нужна разница дат как 1 в вышеприведенном случае, но я получаю значение как 0 если я использую joda дату и время или вручную конвертирую дату в миллисекунды.

Для справки: http://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/

Любые выводы будут полезны.Пример:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
DateTime start = new DateTime(date1 );
DateTime end = new DateTime(date2);
int days = Days.daysBetween(start, end).getDays();
System.out.println("Date difference: " + days);

Вывод: разница в дате: 0

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Joda-Time считает только целые дни, другими словами, сокращает разницу до целого числа.Таким образом, если между вашими значениями осталось чуть более 19 часов, это считается 0 днями.Если вы хотите игнорировать временную часть дат, сначала преобразуйте в LocalDate:

    int days = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();

(Спасибо, что предоставили конкретный код самостоятельно в комментарии. Поскольку вы сказали, что он работает, я думаю, что он заслуживаетбыть ответом.)

0 голосов
/ 11 сентября 2018

Как упоминалось в предыдущих комментариях, Joda-Time считает целые дни и округляет. Поэтому вам нужно будет пропустить время при сравнении. Примерно так будет работать, используя Java.time , сравнивая даты:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
LocalDate start = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long between = ChronoUnit.DAYS.between(start, end);

System.out.println("Date difference: " + between);
...