web-dev-qa-db-ja.com

Joda-Time:期間、間隔、期間の違いは何ですか?

Joda-Time 2では、3種類の時間間隔の違いは何ですか:

  • 期間
  • 間隔
  • 期間

    1. なぜ3つのクラスが必要なのですか?

    2. どちらが優れたパフォーマンスを発揮しますか?

    3. なぜdividingPeriodまたはDurationまたはIntervalインスタンスが実装されていないのですか?例えば。 p = p.divideBy(2);

189
Gerard

3つのクラスは異なる概念を表すために必要です。したがって、相対的なパフォーマンスではなく、ジョブに適したクラスを選択する必要があります。 documentation からitalicsで私が追加したコメント付き:


Joda-Timeのintervalは、1ミリ秒の瞬間から別の瞬間までの時間間隔を表します。両方のインスタントは、タイムゾーンを備えた日時連続体の完全に指定されたインスタントです。 特定の時間を定義しますこれは、昨日の20:00:00GMTから今朝の09:00:00GMTまでの間隔です。

A duration in Joda-Time represents a duration of time measured in milliseconds. The duration is often obtained from an interval. i.e. we can subtract start from end of an interval to derive a duration

A period in Joda-Time represents a period of time defined in terms of fields, for example, 3 years 5 months 2 days and 7 hours. This differs from a duration in that it is inexact in terms of milliseconds. A period can only be resolved to an exact number of milliseconds by specifying the instant (including chronology and time zone) it is relative to. e.g. consider the period of 1 year, if we add this to January 1st we will always arrive at the next January 1st but the duration will depend on whether the intervening year is a leap year or not. Similarly if we add 1 month to the 1st of a month then we will arrive at the 1st of the next month but the duration (in milliseconds) will vary based on the month in question


質問3では、持続時間からミリ秒数を常にlonggetMillis()を使用)として取得し、それを分割して新しい持続時間を構築できるため、持続時間を分割する特定の方法は本当に必要ありません。 (new Duration(long duration)を使用)。

期間を分割することは、上記の期間の定義に基づいて実際には意味を持ちません。例えば半月は何ですか? (その長さは月によって異なります)。

243
mikej

mikej's answer に追加するには:

Joda-Timedurationは「物理的な」時間間隔です。例えば:

12000 milliseconds <-これは期間です

Joda-Timeintervalは、実際にはinstantsのペアです(インスタントを開始します-インスタント終了)。 instantは、「物理的」概念であり、タイムラインのポイントです。例えば(可能な表記法):

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) <-これは間隔です

intervalは、durationに変換できますが、その逆。

次の2つの間隔を考慮してください。

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)

間隔として、エンドポイントが異なるため、I1I2は異なります。しかし、それらを期間に変換すると、同じものが得られます:3600000 milliseconds

(数学の類推:間隔[10,12][95,97]は異なりますintervals、しかしそれらは同じlength "interval length"duration)にマッピングされます。

最後に、periodは「市民時間」の経過であり、月、日、時間などの数で表されます。それ自体ではありません-「物理」間隔を表すため、durationに直接変換することはできません(月は可変長です...)。

これは質問3に答えます:物理時間(期間)を2で割ることができます。

87
leonbloy