Comment puis-je trouver la différence en jours entre deux instances Joda-Time DateTime
? Avec «différence de jours», je veux dire que si le début est le lundi et la fin le mardi, je m'attends à une valeur de retour de 1, indépendamment des heures / minutes / secondes des dates de début et de fin.
Days.daysBetween(start, end).getDays()
me donne 0 si le début est le soir et se termine le matin.
J'ai également le même problème avec d'autres champs de date, j'espérais donc qu'il y aurait un moyen générique d'ignorer les champs de moindre importance.
En d'autres termes, les mois entre février et 4 mars seraient également de 1, tout comme les heures entre 14h45 et 15h12. Cependant, la différence horaire entre 14:01 et 14:55 serait de 0.
Days.daysBetween
c'est incorrect?Instant
, vous ne parlez pas seulementstart.toInstant()
, n'est-ce pas?Days
ClasseL'utilisation de la
Days
classe avec lawithTimeAtStartOfDay
méthode devrait fonctionner:la source
toDateMidnight()
du type DateTime est déconseillée.end
est avant lestart
, renvoie-t-il des jours négatifs?vous pouvez utiliser
LocalDate
:la source
toDateMidnight()
du type DateTime est déconseillée.new LocalDate(date)
plusdate.toLocalDate()
?tl; dr
…ou…
java.time
Pour info, le projet Joda-Time est désormais en mode maintenance , l'équipe conseillant la migration vers les classes java.time .
L'équivalent de Joda-Time
DateTime
estZonedDateTime
.Apparemment, vous voulez compter les jours par date, ce qui signifie que vous voulez ignorer l'heure de la journée. Par exemple, commencer une minute avant minuit et se terminer une minute après minuit devrait se traduire par une seule journée. Pour ce comportement, extrayez un
LocalDate
de votreZonedDateTime
. LaLocalDate
classe représente une valeur de date uniquement sans heure et sans fuseau horaire.Utilisez l'
ChronoUnit
énumération pour calculer les jours écoulés ou d'autres unités.Tronquer
Quant à vous demander une façon plus générale de faire ce comptage lorsque vous êtes intéressé par le delta d'heures en heures d'horloge plutôt que par heures complètes en intervalles de soixante minutes, utilisez la
truncatedTo
méthode.Voici votre exemple de 14h45 à 15h12 le même jour.
Cela ne fonctionne pas pendant des jours. Utilisez toLocalDate () dans ce cas.
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que
java.util.Date
,Calendar
, etSimpleDateFormat
.Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de
java.sql.*
cours.Où obtenir les classes java.time?
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour de futurs ajouts possibles à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour de futurs ajouts possibles à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
La réponse acceptée crée deux
LocalDate
objets, qui sont assez chers si vous lisez beaucoup de données. J'utilise ceci:En appelant,
getMillis()
vous utilisez des variables déjà existantes.MILLISECONDS.toDays()
puis, utilise un calcul arithmétique simple, ne crée aucun objet.la source
java.time.Period
Utilisez la
java.time.Period
classe pour compter les jours .Depuis Java 8, le calcul de la différence est plus intuitif en utilisant
LocalDate
,LocalDateTime
pour représenter les deux datesla source
la source
la source