Existe-t-il un moyen de comparer uniquement les dates pour l'objet DateTime avec la fonction isBefore?
Par exemple,
DateTime start = new DateTime(Long.parseLong(<someInput>));
DateTime end = new DateTime(Long.parseLong(<someInput>));
Maintenant quand je le fais,
while (start.isBefore(end)) {
// add start date to the list
start = start.plusDays(1);
}
Cela se traduit par un comportement incohérent (pour mon scénario) car il prend également en compte le temps, alors que ce que je veux, c'est avoir juste les dates comparées en utilisant isBefore. Est-ce que je peux faire ça?
S'il vous plaît, faites-moi savoir.
Merci!
Si vous ne voulez comparer que des dates, vous voudrez probablement utiliser la classe LocalDate
, plutôt qu'une DateTime
.
Les documents JodaTime sont plutôt bons: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html
Une autre stratégie consiste à le formater.
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
DateTime newStart = df.parse(start);
DateTime newEnd = df.parse(end);
while (newStart.isBefore(newEnd)) {
// add start date to the list
newStart = newStart.plusDays(1);
}
C'est une question assez ancienne mais qui vaut la peine d'ajouter une réponse! Joda-time n'est pas préféré ces jours-ci étant donné que nous avons un support merveilleux dans Java 8 pour les opérations date-heure. Si vous devez toujours utiliser joda-time, utilisez la méthode compareTo
dans la classe LocalDate
.
Compare ce partiel avec un autre renvoyant un entier indiquant la commande. Les champs sont comparés dans l'ordre, du plus grand au plus petit. Le premier champ non égal est utilisé pour déterminer le résultat.
L'objet spécifié doit être une instance partielle dont les types de champ correspondent à ceux de ce partiel.
Java-doc officiel peut être trouvé ici .
Basculez vers LocalDate plutôt que DateTime. Le concept dans JodaTime est un "partiel" (voir l'interface ReadablePartial).
Vous pouvez définir l'heure du DateTime
sur zéro (ce qui signifie minuit) après l'analyse:
// withTime sets hours, minutes, seconds, milliseconds
DateTime start = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
DateTime end = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
Ou utilisez l'une des autres classes Joda Time; il y a bien plus que DateTime
! Si vous ne traitez que des dates, vous voudrez probablement utiliser LocalDate
au lieu de DateTime
.