(Java / Android) Calculer le nombre de jours entre 2 dates et de présenter le résultat dans un format spécifique

Je suis en train de faire calculer le nombre de jours entre 2 dates:

  1. Obtenir la date du jour
  2. Obtenir le passé OU l'avenir de la date
  3. Calculer la différence entre " pas de. 1 et no. 2
  4. Présent la date dans le format suivant
    • Si le résultat est dans le passé (2 jours il ya) ou dans le futur (dans 2 jours)
    • Format: des jours, des semaines, des mois, des années

J'ai essayé de différentes manières, mais ne pouvait pas obtenir le résultat que je voulais au-dessus. J'ai découvert que Android DatePicker boîte de dialogue convertir la date en Entier. Je n'ai pas trouvé un moyen de faire DatePicket widget de date de retour variables au lieu d'un entier.

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

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

J'ai essayé de convertir la date système en Entier, basé sur la ci-dessus, mais cela ne fonctionne pas vraiment lorsque vous essayez de calculer le nombre de jours entre 2 dates.

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;

}
ints ne vont pas travailler pour le calcul de la différence entre les jours. Vous aurez besoin d'utiliser un long temps (comme AedonEtLIRA dit).
C'est la question que je vais avoir - par défaut, le DatePicker dans Android convertir la date en entier, comme l'extrait de code ci-dessus montre.
Il n'est pas immédiatement sens pour moi comment vous pourriez utiliser un int pour représenter une date. À moins d'Android java est différent, vous ne pouvez pas représenter un timestamp comme un int, car le max int valeur n'est pas assez grand. Les horodatages sont très grandes... comme les milliards et les milliards.
c'est la valeur par défaut d'Android. Comme vous le voyez sur le 1er code ci-dessus, lorsque l'utilisateur de fixer une date à partir de la Date de dialogue sélecteur de la DatePickerDialog.OnDateSetListener retourne la valeur en entier.
Dans votre code, ints sont utilisés pour représenter l'année, le mois de l'année, et le jour du mois. Il a le sens parfait à utiliser ints pour cela... En fait, il n'aurait aucun sens d'utiliser longs pour que. Mon commentaire (et toutes les réponses ci-dessous) suggèrent que vous devez déterminer la différence entre deux dates en soustrayant les horodatages que représentent ces dates. Cela devrait être fait avec de longs. Comme ces réponses démontrent, vous devez déterminer la différence entre les dates avec des horodatages, puis de convertir la différence en jours, semaines, mois, etc...

OriginalL'auteur striders | 2012-04-25