(Java/Android) Вычислить дни между двумя датами и представить результат в определенном формате

Я пытаюсь рассчитать дни между двумя датами следующим образом:

  • Получить текущую дату
  • Получить прошлую или будущую дату
  • Рассчитайте разницу между no. 1 и нет. 2
  • Представьте даты в следующем формате
    • Если результат прошёл (2 дня назад) или в будущем (через 2 дня)
    • Формат будет: дни, недели, месяцы, годы

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

private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, **int** year, 
                                  **int** monthOfYear, **int** dayOfMonth) {
                enteredYear = year;
                enteredMonth = monthOfYear;
                enteredDay = dayOfMonth;
            }
        };

Я попытался преобразовать системную дату в Integer на основе вышеизложенного, но на самом деле это не работает при попытке рассчитать дни между двумя датами.

private void getSystemDate(){
     final Calendar c = Calendar.getInstance();

        mYear = c.get(Calendar.YEAR);
        systemYear = mYear;

        mMonth = c.get(Calendar.MONTH);
        systemMonth = mMonth + 1;

        mDay = c.get(Calendar.DAY_OF_MONTH);
        systemDay = mDay;

}

Ответ 1

/** 
  *  Returns a string that describes the number of days
  *  between dateOne and dateTwo.  
  *
  */ 

public String getDateDiffString(Date dateOne, Date dateTwo)
{
    long timeOne = dateOne.getTime();
    long timeTwo = dateTwo.getTime();
    long oneDay = 1000 * 60 * 60 * 24;
    long delta = (timeTwo - timeOne) / oneDay;

    if (delta > 0) {
        return "dateTwo is " + delta + " days after dateOne";
    }
    else {
        delta *= -1;
        return "dateTwo is " + delta + " days before dateOne";
    }
}

Изменить: просто увидел тот же вопрос в другом потоке: как рассчитать разницу между двумя датами с помощью java

Edit2: Чтобы получить Год/Месяц/Неделя, сделайте что-то вроде этого:

int year = delta / 365;
int rest = delta % 365;
int month = rest / 30;
rest = rest % 30;
int weeks = rest / 7;
int days = rest % 7;

Ответ 2

long delta = Date2.getTime() - Date1.getTime();

new Date(delta);

Отсюда вы просто выбираете свой формат. Может быть, использовать формат даты? Что касается определения будущего материала и всего этого, вы можете просто увидеть, является ли дельта положительным или отрицательным. Отрицательная дельта будет указывать на прошедшее событие.

Ответ 3

Ну, у java/android API есть все ответы для вас:

    Calendar myBirthday=Calendar.getInstance();
    myBirthday.set(1980, Calendar.MARCH, 22);
    Calendar now = Calendar.getInstance();
    long diffMillis= Math.abs(now.getTimeInMillis()-myBirthday.getTimeInMillis());
    long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS);