3月份两个日期之间的天数差异很大

时间:2016-11-01 23:02:56

标签: java android datetime

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

dateBefore为2017年3月1日且dateAfter为2017年3月31日时,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;
}

1 个答案:

答案 0 :(得分:2)

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

由于您正在使用Android,因此您需要像在标准Java 7项目中一样包含此库,即使您使用了jack编译器,因为Android中尚未提供java.time SDK。

设置

在您应用的build.gradle依赖关系列表中,您可以添加三个库的Android自适应:

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

...如果你需要能够运行使用threeten的标准Java单元测试,你可以通过添加它来排除Android部分并包含三个库本身(如果你使用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);