190 votes

Joda-temps : ce qui ' la différence entre l’intervalle, la période et la durée ?

Dans Joda-Time 2, quelle est la différence entre les trois types de périodes: Période, l'Intervalleet la Durée?

  1. Pourquoi avons-nous besoin de trois classes?

  2. Celui qui fonctionne mieux?

  3. Pourquoi est - diviser une Période ou de la Durée ou de l'Intervalle instance a pas mis en œuvre? E. g. p = p.divideBy(2);

245voto

mikej Points 30224

3 classes sont nécessaires parce qu'ils représentent des concepts différents, il s'agit donc de choisir le plus approprié pour la tâche plutôt que de la performance relative. À partir de la documentation avec les commentaires ajoutés par moi en italique:


Un intervalle de Joda-Time représente un intervalle de temps à partir d'une milliseconde instant à un autre instant. Les deux instants sont précisées instants dans le datetime continuum, complet avec de fuseau horaire. Des moments spécifiques sont définis par exemple, ce pourrait être l'intervalle entre 20:00:00GMT et d'hier, et 09:00:00GMT ce matin.

D'une durée de Joda-Time représente une durée de temps mesuré en millisecondes. La durée est souvent obtenu à partir d'un intervalle. c'est à dire on peut soustraire commencer à partir de la fin d'un intervalle de dériver une durée

Une période de Joda-Time représente une période de temps définie en termes de champs, par exemple, 3 ans et 5 mois 2 jours et 7 heures. Ceci diffère d'une durée qu'il est inexact en termes de millisecondes. Une période qui ne peut être résolu qu'à un nombre exact de millisecondes en spécifiant l'instant (y compris la chronologie et de fuseau horaire), il est relatif. par exemple, considérons la période de 1 an, si l'on ajoute ce 1er janvier, nous allons toujours par arriver à la prochaine, le 1er janvier, mais la durée dépend de la période de l'année est une année bissextile ou non. De même, si nous ajoutons 1 mois pour le 1er d'un mois, puis nous arriverons au 1er du mois suivant, mais la durée (en millisecondes) varient 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 parce que nous pouvons toujours obtenir le nombre de millisecondes à partir de la durée en tant que long (à l'aide d' getMillis()), la diviser et de construire une nouvelle durée (à l'aide d' new Duration(long duration)).

De la division d'une période n'ont pas vraiment de sens réel basée sur la définition d'une période ci-dessus. par exemple, ce qui est la moitié d'un mois? (sa longueur dépend des mois).

88voto

leonbloy Points 27119

Pour ajouter à mikej de réponse:

Un Joda la durée est une "physique" de l'intervalle de temps; par exemple:

12000 milliseconds <-- ceci est une durée

Un Joda de l' intervalle est en fait une paire de secondes (démarrage instantané de la fin de l'instantané). Un instant , est entièrement spécifié datetime (à la fois civile et physique). Par exemple, (pseudo de notation):

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) <-- ceci est un intervalle

Un intervalle, alors, peut être converti en durée, mais pas l'inverse.

Tenir compte de 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)

Sous la forme d'intervalles, I1 et I2 sont différentes, mais si je convertir des durées, je reçois 3600000 milliseconds, d'où les durées sont égales.

Enfin, une période est une période de "temps civil", exprimée en nombre de mois, jours, heures, etc. Il n'est pas-en soi - représentent une "physique" de l'intervalle, d'où il ne peut pas être directement converti en durée (mois ont longueur variable...).

Ceci répond à la question 3: vous ne pouvez diviser par deux le temps physique (une durée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X