1. ホーム
  2. java

[解決済み] Javaで2つの日付の間の日数の差は?

2023-08-17 23:09:25

質問

私は 2つの日付の間の日数 1つはレポートからで、もう1つは現在の日付です。私のスニペット。

  int age=calculateDifference(agingDate, today);

ここで calculateDifference はプライベートメソッドです。 agingDate であり todayDate オブジェクトであることを明確にするためです。私は、Javaフォーラムから2つの記事に従ってきました。 スレッド1 / スレッド 2 .

スタンドアロン プログラムでは正常に動作しますが、これをレポートから読み取るロジックに含めると、値に異常な違いが発生します。

なぜこのようなことが起こるのでしょうか、また、どのように修正すればよいのでしょうか。

EDIT :

実際のDaysと比較して、日数が多く表示されるのですが。

public static int calculateDifference(Date a, Date b)
{
    int tempDifference = 0;
    int difference = 0;
    Calendar earlier = Calendar.getInstance();
    Calendar later = Calendar.getInstance();

    if (a.compareTo(b) < 0)
    {
        earlier.setTime(a);
        later.setTime(b);
    }
    else
    {
        earlier.setTime(b);
        later.setTime(a);
    }

    while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))
    {
        tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));
        difference += tempDifference;

        earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
    }

    if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR))
    {
        tempDifference = later.get(Calendar.DAY_OF_YEAR) - earlier.get(Calendar.DAY_OF_YEAR);
        difference += tempDifference;

        earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
    }

    return difference;
}

ノート.

残念ながら、どの回答も問題解決には至りませんでした。私が達成したのは この問題 の助けを借りて ジョダイム ライブラリの助けを借りています。

どのように解決するのですか?

私は、あなたが優れた ジョダ時間 ライブラリを使うことをお勧めします。 単純に次のように書けばよいでしょう。

import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Days;

Date past = new Date(110, 5, 20); // June 20th, 2010
Date today = new Date(110, 6, 24); // July 24th 
int days = Days.daysBetween(new DateTime(past), new DateTime(today)).getDays(); // => 34