3月份两个日期的天数差错了



我试图计算三月两个日期之间的天数,但我得到了错误的结果。

dateBefore为01/03/2017,dateAfter为31/03/2017时,diff为29天,但应该是30天(31-1)?

public static int daysBetweenDates2(Date dateBefore, Date dateAfter) { 
    long diff = (dateAfter.getTime() - dateBefore.getTime())/(24*60*60*1000);
    return (int)diff;
}

我建议不要使用java.util.Date。这有点尴尬。如果允许使用第三方库,我建议使用JSR-310后端口。

因为你正在使用Android,你需要包括这个库,就像你会在一个标准的Java 7项目,即使你使用杰克编译器,因为java.time在Android SDK中还不可用。

设置

在你的应用的build.gradle依赖列表中,你可以添加Android适配库:

compile "com.jakewharton.threetenabp:threetenabp:1.0.4"

…如果你需要能够运行使用threeten的标准Java单元测试,你可以排除Android部分,并通过添加以下内容来包含threeten库本身(如果你使用Roboelectric,可能没有必要,但我不是100%确定):

testCompile ('org.threeten:threetenbp:1.3.2') {
    exclude module: 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}

然后你需要在你的应用程序中初始化Android库:

// e.g. in your Application subclass
@Override
public void onCreate() {
    AndroidThreeTen.init(this);
}
使用

现在你可以这样做:

LocalDate dateBefore = LocalDate.of(2017, 3, 1);
LocalDate dateAfter = LocalDate.of(2017, 3, 31);
long daysBetween = ChronoUnit.DAYS.between(dateBefore, dateAfter);
assertEquals(30, daysBetween); 

最新更新