Dans Joda-Time 2, quelle est la différence entre les trois types d'intervalles de temps:
- Période
- Intervalle
-
Pourquoi avons-nous besoin de trois classes?
Lequel fonctionne le mieux?
Pourquoi la division d' une instance Période, Durée ou Intervalle n'est-elle pas implémentée? Par exemple
p = p.divideBy(2);
Period
Réponses:
3 classes sont nécessaires car elles représentent des concepts différents, il s'agit donc de choisir celle qui convient à l'emploi plutôt que de la performance relative. De la documentation avec des commentaires ajoutés par moi en italique :
Un intervalle dans Joda-Time représente un intervalle de temps entre un instant de la milliseconde et un autre instant. Les deux instants sont des instants entièrement spécifiés dans le continuum datetime, avec le fuseau horaire. Des heures spécifiques sont définies, par exemple, cela pourrait être l'intervalle entre 20: 00: 00GMT hier et 09: 00: 00GMT ce matin.
Une durée en Joda-Time représente une durée de temps mesurée en millisecondes. La durée est souvent obtenue à partir d'un intervalle. c'est-à-dire que nous pouvons soustraire le début de la fin d'un intervalle pour dériver une durée
Une période dans Joda-Time représente une période de temps définie en termes de champs, par exemple 3 ans 5 mois 2 jours et 7 heures. Cela diffère d'une durée en ce qu'elle est inexacte en termes de millisecondes. Une période ne peut être résolue en un nombre exact de millisecondes qu'en spécifiant l'instant (y compris la chronologie et le fuseau horaire) auquel elle est relative. Par exemple, considérez la période d'un an, si nous ajoutons cela au 1er janvier, nous arriverons toujours au 1er janvier suivant, mais la durée dépendra du fait que l'année intermédiaire est une année bissextile ou non. De même si on ajoute 1 mois au 1er d'un mois alors on arrivera au 1er du mois suivant mais la durée (en millisecondes) variera en fonction du mois en question
Pour la question 3, une méthode spécifique pour diviser une durée n'est pas vraiment nécessaire car nous pouvons toujours obtenir le nombre de millisecondes de la durée en tant que
long
(en utilisantgetMillis()
), le diviser et construire une nouvelle durée (en utilisantnew Duration(long duration)
).Diviser une période n'a pas vraiment de sens réel basé sur la définition d'une période ci-dessus. par exemple, qu'est-ce qu'un demi-mois? (sa longueur dépendrait du mois).
la source
Pour ajouter à la réponse de mikej :
Une durée Joda-Time est un intervalle de temps "physique"; par exemple:
12000 milliseconds
<- c'est une duréeUn intervalle Joda-Time est en fait une paire d' instants (instant de début - instant de fin). Un instant est, encore une fois, un concept «physique», un point dans la chronologie. Par exemple (juste une notation possible):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- c'est un intervalleUn intervalle peut donc être converti en durée , mais pas l'inverse.
Considérez ces deux intervalles:
I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)
En tant qu'intervalles,
I1
etI2
sont différents, parce que les points d'extrémité sont différents; mais si je les convertir à des durées, je reçois la même chose:3600000 milliseconds
.(Analogie mathématique: les intervalles
[10,12]
et[95,97]
sont des intervalles différents , mais ils ont la même longueur : "longueur d'intervalle" correspond à la durée ).Enfin, une période est un intervalle de «temps civil», exprimé en nombre de mois, de jours, d’heures, etc. durée (les mois ont des durées variables ...).
Cela répond à la question 3: vous ne pouvez diviser que par deux un temps physique (une durée).
la source