回答:
3つのクラスが必要なのは、それらが異なる概念を表すため、相対的なパフォーマンスではなく、ジョブに適したクラスを選択することの問題です。斜体で私が追加したコメント付きのドキュメントから:
間隔 Jodaの時間では、別の瞬間に、1ミリ秒時点からの時間間隔を表します。両方のインスタントは、タイムゾーンを備えた日時連続体で完全に指定されたインスタントです。特定の時刻が定義されます。たとえば、これは昨日の20:00:00GMTから今朝の09:00:00GMTまでの間隔である可能性があります。
期間ジョダタイムでは、ミリ秒単位で測定された時間の長さを表しています。多くの場合、期間は間隔から取得されます。つまり、間隔の終わりから開始を減算して、期間を導き出すことができます
期間ジョダタイムでは、例えば、3年5ヶ月2日と7時間、フィールドの用語で定義された期間を表しています。これは、ミリ秒の点で不正確であるという点で、期間とは異なります。期間は、それが相対的である瞬間(時系列とタイムゾーンを含む)を指定することによってのみ、正確なミリ秒数に解決できます。たとえば、1年の期間を考えます。これを1月1日に追加すると、常に次の1月1日に到着しますが、期間は、うるう年かどうかによって異なります。同様に、月の1日に1か月を追加すると、翌月の1日に到着しますが、期間(ミリ秒単位)は問題の月に基づいて異なります
質問3では、持続時間からミリ秒数を常にlong
(を使用してgetMillis()
)取得し、それを除算して新しい持続時間を(を使用してnew Duration(long duration)
)作成できるため、持続時間を分割する特定の方法は実際には必要ありません。
期間の分割は、上記の期間の定義に基づく実際の意味はありません。例えば半月とは何ですか?(その長さは月によって異なります)。
mikejの答えに追加するには:
ジョダタイム 期間は、「物理的な」時間間隔です。例えば:
12000 milliseconds
<-これは期間です
Joda-Time 間隔は、実際には2つの瞬間(開始瞬間-終了瞬間)です。ここでも、瞬間とは「物理的」な概念であり、タイムラインのポイントです。例(可能な表記のみ):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<-これは間隔です
したがって、間隔は期間に変換できますが、その逆はできません。
次の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]
は異なる間隔ですが、長さは同じです:"間隔の長さ"はdurationにマップされます)。
最後に、期間は「市民の時間」の経過であり、月、日、時間などの数で表されます。それ自体は「物理的な」間隔を表すものではないため、直接に変換することはできません。期間(月には可変長があります...)。
これが質問3に答えます。物理的な時間(期間)を2で除算することしかできません。
Period
。そのような用語を標準化する提案が提起されましたが、まだ達成されていません。