2つのDateTimeオブジェクトの違いを、PeriodなどではなくDateTimeとして取得したいと思います。どうやってやるの ?
4 に答える
それは意味がないので、あなたはできません。
2012年9月25日と2012年12月25日の違いは何ですか?2か月、つまり60日ほどです(正確には確認していません)が、確かに「1970年2月20日」などではありません。
違いが欲しいと思ったらDateTime
、それはあなたのデザインの何かが台無しになっていることを意味します、そしてあなたはそれを再訪するべきです。問題がどこにあるのかを正確に把握するのに問題がある場合は、詳細をお知らせください。タイプが間違っている場所を特定できる場合がありますが、基本的に、求めているものは機能しません。
私があなたの質問を理解している場合は、2つの時間の間のミリ秒数を表すint値にカレンダークラスメソッドcompareToを使用できます。
public int compareTo(Calendar anotherCalendar) 2つのCalendarオブジェクトによって表される時間値(エポックからのミリ秒オフセット)を比較します。
によって指定されます:インターフェイスComparableのcompareTo
パラメータ:anotherCalendar-比較するカレンダー。
戻り値:
引数で表される時間がこのカレンダーで表される時間と等しい場合、値は0です。
このカレンダーの時刻が引数で表される時刻より前の場合は、0未満の値。
このカレンダーの時刻が引数で表される時刻より後の場合は、0より大きい値。
スロー:NullPointerException-指定されたカレンダーがnullの場合。IllegalArgumentException-無効なカレンダー値が原因で、指定されたCalendarオブジェクトの時間値を取得できない場合。
いつでもDateFormatとCalendarを使用できます。2つの日付の差を簡単に計算できます。
DateFormat
、、SimpleDateFormat
およびを参照してくださいCalendar
。
他の人がなぜこれが必要なのかわからないと言っているように、次のコードは2つの日付の間の日数を示し、必要な場合はこの数値に1970年の日付を加えたものになります
@Test
public void test() {
DateTime d1 = new DateTime(2011, 1, 1, 0, 0);
DateTime d2 = new DateTime(2011, 2, 1, 0, 0);
int days = Days.daysBetween(d1, d2).getDays();
assertEquals(31, days);
DateTime dateTime = new DateTime(new Date(0), DateTimeZone.UTC).plusDays(days);
assertEquals(new DateTime(1970, 2, 1, 0, 0, 0, DateTimeZone.UTC), dateTime);
}