(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:
- Obtenir la date du jour
- Obtenir le passé OU l'avenir de la date
- Calculer la différence entre " pas de. 1 et no. 2
- 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...
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
Vous devez vous connecter pour publier un commentaire.
Edit: Viens de voir la même question dans un autre fil:
comment calculer la différence entre deux dates à l'aide de java
Edit2: Pour obtenir l'Année/Mois/Semaine, faire quelque chose comme ceci:
Vous avez besoin de faire quelques calculs et l'utilisation de l'opérateur modulo. Pour afficher les x secondes en minutes et secondes, vous voulez faire cela: int minutes = x / 60; int secondes = x % 60; String timeText = minutes + " min " + secondes + "sec"; Le signe de pourcentage est appelé l'opérateur modulo.
Mise à jour de ma réponse... Merci d'accepter de répondre si vous pensez que c'est correct
Merci pour la réponse révisée sur les semaines/jours/mois. Je vais le brancher dans mon code Android et donnera un coup de feu!
À l'aide d'un int ci-dessus ne fonctionnera que si vos dates sont à moins de 25 jours d'intervalle. Modifié la réponse à utiliser longs dans la place.
OriginalL'auteur
À partir d'ici, vous venez chercher votre format. Peut-être utiliser une date de formateur? Comme pour la détermination de l'avenir des trucs et tout ça, vous avez juste à voir si le delta est positif ou négatif. Un delta négatif indique un événement passé.
OriginalL'auteur
Bien, java/android API a toutes les réponses pour vous:
OriginalL'auteur