web-dev-qa-db-fra.com

Comparaison de date uniquement avec "isBefore" dans Java Joda Time

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!

14
test123

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

21
Tim Gage

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);
}    
9
FAtBalloon

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 .

1
Saikat Sengupta

Basculez vers LocalDate plutôt que DateTime. Le concept dans JodaTime est un "partiel" (voir l'interface ReadablePartial).

1
drobert

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.

0
Jesper