2012-03-08 10 views
20

私は、の総計ミリ秒(ではなく、のミリ秒フィールド)をPeriodオブジェクトインスタンスから取得しようとしています。私は簡単にそれを与える方法を見つけることができなかったので、私は複数のコンバージョンを試みました。Jodaの時間、合計のミリ秒までの期間

誰もそれを必要とし、それを取得することができましたか?

(私は負の期間を把握するために、私のパッチのためにこれを必要とする;負ミリ秒=負の期間)

答えて

14

月と年のようなフィールドが可変であるので、あなたは、Periodから直接ミリ秒を取得することはできませんミリ秒単位で表します。

この作業を行うには、Periodが実際のミリ秒の時間を計算できる「ベースライン」の瞬間を提供する必要があります。

たとえば、Period.toDurationFromおよびPeriod.toDurationToメソッドは、このようなベースラインインスタントをとり、Durationオブジェクトを計算します。このオブジェクトを次に取得できます。

toDurationFromためJavadocは言う:

はスタートの瞬間に関連し、この期間の合計ミリ秒の時間を取得します。 このメソッドは、期間を計算するために指定された瞬間に期間を追加します。

期間の期間が異なるため、インスタントを指定する必要があります。たとえば、1ヶ月の期間は、長さの異なる月のために28〜31日に相当する期間(ミリ秒単位)で異なる場合があります。同様に、夏時間のカットオーバー時には、1日は通常23〜25時間で変わります。

したがって、アプリケーションの適切なベースラインインスタントを選択する必要があります。

+0

はそれを得た: のDateTimeゼロ=新日時(0); long millis = period.toDurationFrom(ゼロ).getMillis(); – Droritos

+0

@DrorWeiss:これは比較的短期間だけ有効です。月より長い期間を使用し始めると、歪んだ結果になることがあります。 – skaffman

+0

私はそれをテストしました..これまでのところよく見えます。しかし、私は見守っています。ありがとう! ;) – Droritos

2

から特定の時間を取得する場合は、DateTimeクラスのplus()メソッドまたはminus()メソッドを使用してミリ秒を取得します。

からミリ秒を取得

DateTime start = new DateTime(); //NOW 
DateTime end = start.plus(<your period>); 
long millis = end.getMillis() - start.getMillis(); 
関連する問題