我想计算两个日期之间的时间段,我搜索过,但是我找不到我需要的东西。我有这段代码:
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/05
到26/07
实际上是1 month
,但不仅仅是1 day
,它是29 days
请问为什么它会给我错误的价值?
答案 0 :(得分:3)
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));
}
}
祝你好运!