6

このコードを使用して、入力過去日付と現在日付の間の月数を計算しています。JodaTime を使用しています

LocalDate date1 = new LocalDate(installmentStartDate2);
        LocalDate date2 = new LocalDate(new java.util.Date());
        PeriodType monthDay = PeriodType.yearMonthDayTime();
        Period difference = new Period(date1, date2, monthDay);
        int months = difference.getMonths();
        return months + 1; 

2013 年 1 月 1 日を入力すると、答えとして 10 が返されます。しかし、問題は、2012 年 1 月 1 日を入力しても 10 になることです。

つまり、計算中に年は考慮されません。

2012 年 1 月 1 日を入力すると 22 という正しい答えを得るにはどうすればよいですか。

JodaTime はそれを行うことができますか? もし、そうなら ?どのように ?そうでない場合は?他のアプローチはありますか?

4

4 に答える 4

20

年、月、日の違いを求めているので、1 年、10 か月、29 日が返されます。

使用するだけです:

int months = Months.monthsBetween(date1, date2).getMonths();

または、本当に使用して、おそらく日数も取得したい場合は、次new Periodを使用できます。

PeriodType monthDay = PeriodType.yearMonthDayTime().withYearsRemoved();
Period difference = new Period(date1, date2, monthDay);

をそのまま使用することもできPeriodType.months()ますが、本当に月のみに関心がある場合は、上記の最初のスニペットを使用して、1 つの短いステートメントですべてを実行します。

于 2013-10-30T09:00:38.243 に答える
3

あなたのコードはほぼ正しいです。

あなたは変えられる :

PeriodType monthDay = PeriodType.yearMonthDayTime();

に :

PeriodType monthDay = PeriodType.months();

それも機能します。

于 2013-10-30T09:10:42.320 に答える
1

Joda 時間は、この問題に対処するための良い方法です

Joda 時刻の日付オブジェクトを作成する

DateTime startDate = DateTime.parse("1970-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"))
DateTime endDate = DateTime.parse("2015-02-25", DateTimeFormat.forPattern("yyyy-MM-dd"))

2 つの日付の差 (日)

int days = Days.daysBetween(startDate, endDate).getDays()

月単位の 2 つの日付の差

int months = Months.monthsBetween(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1)).getMonths()

2 つの日付の年の差

int years = Years.yearsBetween(startDate, endDate).getYears();
于 2016-06-15T05:31:36.000 に答える