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