Android

Android calculate days between two dates

Android вычисляет дни между двумя датами

Я написал следующий код для нахождения дней между двумя датами

    startDateValue = new Date(startDate);
endDateValue = new Date(endDate);
long diff = endDateValue.getTime() - startDateValue.getTime();
long seconds = diff / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = (hours / 24) + 1;
Log.d("days", "" + days);

Когда начальная и конечная даты равны 3/3/2017 и 2/3/2017 соответственно, отображается количество дней 29. Хотя, когда они относятся к одному дню, отображается 1.(Количество дней, на которые человек берет отпуск.Итак, если кто-то берет отпуск на один день, он должен выбрать ту же дату начала и окончания.Итак, в данном случае он взял отпуск на два дня).

Что я делаю не так? Спасибо, что уделили мне время.

Примечание: Пожалуйста, не используйте конструктор date . Проверьте принятый ответ ниже. Используйте simpledateformat или Joda time. Конструктор Date устарел.

Переведено автоматически
Ответ 1

Ваш код для генерации объекта date:

Date date = new Date("2/3/2017"); //deprecated

Вы получаете 28 дней в качестве ответа, потому что, согласно Date(String) конструктору, он считает день = 3, месяц = 2 и год = 2017

Вы можете преобразовать строку в дату следующим образом:

String dateStr = "2/3/2017";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf.parse(dateStr);

Используйте приведенный выше шаблон, чтобы создать объект Date. Затем используйте приведенный ниже код для вычисления дней между двумя датами. Надеюсь, это прояснит ситуацию.

Это можно сделать следующим образом:

long diff = endDateValue.getTime() - startDateValue.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

Пожалуйста, проверьте ссылку

Если вы используете время Joda, это намного проще:

int days = Days.daysBetween(date1, date2).getDays();

Пожалуйста, проверьте JodaTime

Как использовать JodaTime в Java Project

Ответ 2

Kotlin

Вот пример вычисления дней с сегодняшнего дня до некоторой даты:

 val millionSeconds = yourDate.time - Calendar.getInstance().timeInMillis
leftDays.text = TimeUnit.MILLISECONDS.toDays(millionSeconds).toString() + "days"

Если вы хотите рассчитать два дня, то измените:

val millionSeconds = yourDate1.time - yourDate2.time

должно сработать.

Ответ 3
public static int getDaysDifference(Date fromDate,Date toDate)
{
if(fromDate==null||toDate==null)
return 0;

return (int)( (toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24));
}
Ответ 4

Android Полностью ли поддерживает java-8? Если да, вы можете просто использовать ChronoUnit class

LocalDate start = LocalDate.of(2017,2,3);
LocalDate end = LocalDate.of(2017,3,3);

System.out.println(ChronoUnit.DAYS.between(start, end)); // 28

или то же самое с помощью форматера

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy");
LocalDate start = LocalDate.parse("2/3/2017",formatter);
LocalDate end = LocalDate.parse("3/3/2017",formatter);

System.out.println(ChronoUnit.DAYS.between(start, end)); // 28
java android date kotlin