java - 三月两个日期之间的天数差异错误

标签 java android datetime

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

何时 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,因此即使您使用 jack 编译器,也需要像在标准 Java 7 项目中一样包含此库,因为 java.time 不是尚未在 Android SDK 中提供。

设置

在您应用的 build.gradle 依赖项列表中,您可以添加 Threeten 库的 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); 

关于java - 三月两个日期之间的天数差异错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369962/

相关文章:

java - 尝试使用Java -cp 实现entityManagerFactory 时获取 "Class extends type annotation appeared on a non class target"

java - 在 Java 中读取相对较大的字节文件的最快方法

java - 运行修改后的 Java 代码时出现问题

android - 我怎样才能让我的应用程序每隔 X 次做一些事情

mysql - 选择两个可为空的日期时间中最早的一个

java - 在 JTable 中显示 Emoji 字符

Android 模拟器 Ubuntu 14.04 无法创建不支持的 SDL2 窗口 GLX

Android 订阅和 Google API

php - 如何去掉日期时间末尾多余的零?

java - 格式日期Java