2012-01-15 30 views
2

"millis"コンストラクタを使用してPeriodオブジェクトを設定しようとしていて、それに応じてすべての関連フィールドを更新する必要があります(年、月、週、日、時、分、秒)Joda時間、ミリ秒からの期間

mPeriod = new Period(millis, PeriodType.standard()); 

はそれに応じて、関連するすべてのフィールドを記入していません。次のコードを使用して、ある

。 数週間と数分(入力ミリ秒の場合は1325965615539

誰かが私にこの事を理解してもらえますか?

答えて

1

あなたはPeriod#normalizedStandard();

を使用して、それを正規化することができ、それは数ヶ月または数年の日数についての仮定を行うことができないのでしかし、Period「すべての関連フィールドに記入」ことができる方法は、ありません。それができるのは、週、日、時間フィールドに変換することです。非常に詳細で

この上のJavadocタッチが、ではなく:

期間は年または月が含まれている場合は、その後、数ヶ月は、0〜11日のフィールドと意志の下になるように正規化された になります必要に応じて に正規化してください。は 月のフィールドにオーバーフローしません。従って、1年15ヶ月の期間は、2月1日に2 年に標準化されます。しかし、1ヶ月間の40日間は1ヶ月として残ります。 40日間。

(重点鉱山)

あなたはそれが年と月に正規化する必要がある場合は、それらのフィールドの値とPeriodを構築する必要があります。 (例えば、新しいDateTime())時間内に与えられた瞬間にPeriod開始を作成するために

  1. ミリ秒
  2. 使用Duration#toPeriodFrom(ReadableInstant)Duration構築:

    また、あなたはDurationを使用することができます。ドキュメントによれば、これはうまくいくはずです:

    この変換は正確にピリオドのフィールドを決定します。 の結果は、インスタントミリ秒、 インスタントの年表、標準期間タイプおよびこの期間の長さに基づいています。ここで


normalize()があなたのミリ秒の入力に何をすべきかです:二行目がしか週間まで、正規化されている

import org.joda.time.Period; 

class Normalize { 
     public static void main(String[] args) { 
       Period period = new Period(1325965615539L); 
       System.out.println(period); 
       System.out.println(period.normalizedStandard()); 
     } 
} 

// outputs 
PT368323H46M55.539S 
P2192W2DT19H46M55.539S 

注意してください。

+0

正規化は効果がありません。何もしませんでした... – Droritos

+0

@DrorWeiss - おそらく効果がありましたが、おそらくあなたが期待していたものではありませんでした。理由を明確にするために私の答えを更新しました。 –

関連する問題