198

Joda-Time 2では、3種類の期間の違いは何ですか。

  • 限目
  • 間隔
  • 間隔

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

    2. どちらがパフォーマンスが優れていますか?

    3. 期間または期間または間隔インスタンスの分割が実装されていないのはなぜですか?例えばp = p.divideBy(2);

4

2 に答える 2

256

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)です。

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

于 2010-04-16T14:25:45.917 に答える
93

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で割ることしかできません。

于 2010-04-16T15:18:21.993 に答える