0

请我想计算两个日期之间的时间段,我搜索并没有找到我需要的。我有这个代码:

public int getNbjours() {
        DateTime dt1 = new DateTime(date1);
        DateTime dt2 = new DateTime(date2);
        Period period = new Period(dt1, dt2);
        nbjours=period.getDays();   
           return nbjours;
    }


    public int getNbmois() {
        DateTime dt1 = new DateTime(date1);
        DateTime dt2 = new DateTime(date2);
        Period period = new Period(dt1, dt2);
         nbmois=period.getMonths();

        return nbmois;
    }

问题是有时它会给我错误的结果,例如:

From 2013-05-27 To 2013-06-28 => 1 day and 1 months (it's right here)
From 2013-05-27 To 2013-07-26 => 1 it gives me also 1 day and 1 months and that's false !
From 2013-04-01 To 2013-09-04 => 3 days and 5 months (here it's right)

在那个错误的值中,通常27/0526/07真的1 month但不仅仅是1 day29 days 请问为什么它给了我错误的值?

4

1 回答 1

2

的行为org.joda.time.Period似乎是错误的,因为您错过了几周。看这个测试:

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.joda.time.DateMidnight;
import org.joda.time.Period;
import org.junit.Test;

public class DateTimePeriodTest {

    @Test
    public void period1ShouldHaveNoWeeks() {
        final Period period = new Period(new DateMidnight(2013, 5, 27), new DateMidnight(2013, 6, 28));
        assertThat(period.getMonths(), is(1));
        assertThat(period.getWeeks(), is(0));
        assertThat(period.getDays(), is(1));
    }

    @Test
    public void period2ShouldHaveFourWeeks() {
        final Period period = new Period(new DateMidnight(2013, 5, 27), new DateMidnight(2013, 7, 26));
        assertThat(period.getMonths(), is(1));
        assertThat(period.getWeeks(), is(4));
        assertThat(period.getDays(), is(1));
    }
}

祝你好运!

于 2013-06-08T13:22:21.320 回答