Joda-Time 2では、3種類の時間間隔の違いは何ですか:
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では、持続時間からミリ秒数を常にlong
(getMillis()
を使用)として取得し、それを分割して新しい持続時間を構築できるため、持続時間を分割する特定の方法は本当に必要ありません。 (new Duration(long duration)
を使用)。
期間を分割することは、上記の期間の定義に基づいて実際には意味を持ちません。例えば半月は何ですか? (その長さは月によって異なります)。
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)
間隔として、エンドポイントが異なるため、I1
とI2
は異なります。しかし、それらを期間に変換すると、同じものが得られます:3600000 milliseconds
。
(数学の類推:間隔[10,12]
と[95,97]
は異なりますintervals、しかしそれらは同じlength: "interval length"はduration)にマッピングされます。
最後に、periodは「市民時間」の経過であり、月、日、時間などの数で表されます。それ自体ではありません-「物理」間隔を表すため、durationに直接変換することはできません(月は可変長です...)。
これは質問3に答えます:物理時間(期間)を2で割ることができます。