两个日期之间的天数。日期错误在哪里?

Days between two dates. Where is the error in dates'?

我正在尝试计算两个日期之间的天数。 这是我的代码:

public class Main {
    public static void main(String[] args) {
        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
        Date date1 = null;
        Date date2 = null;
        String str1 = "01.01.1900";
        String str2 = "16.06.2017";
        try{
            date1 = format.parse(str1);
            date2 = format.parse(str2);
        } catch (Exception e){
            e.printStackTrace();
        }
        long i1 = date2.getTime() - date1.getTime();
        System.out.println(i1/86400000);//milisec to days
    }
}

结果是:42899 天。

但是如果我们重新检查 EXCEL 中的减法,结果是 42901

拜托,谁能告诉我真相结果在哪里?

Java 将整数相除时将结果向下舍入,所以我认为你在这里浪费了一天:

System.out.println(i1/86400000);//milisec to days

在我尝试 Java 8 API 之后,它显示 42900 天 (请注意,Java 8 或 Excel 不包括范围内的最后一天):

LocalDate from = LocalDate.of(1900, Month.JANUARY, 1);
LocalDate to = LocalDate.of(2017, Month.JUNE, 16);
long daysBetween = ChronoUnit.DAYS.between(from, to);

由于 here 中描述的错误,Excel 以错误的方式计算了另一天。 所以回答你的问题 - 你在四舍五入时失去了一天,而另一天被 Excel 错误地添加了。

使用Joda Time。它比 Java 的标准库中的内容更好 API。这是我针对您的案例的代码:

package com.example;

import org.joda.time.DateTime;
import org.joda.time.Days;

public class Main{
 public static void main(String[] args) {

    DateTime start = new DateTime(1900, 1, 1, 0, 0, 0, 0);
    DateTime end = new DateTime(2017, 6, 16, 0, 0, 0, 0);

    // calculate  days between two dates 
    int days = Days.daysBetween(start, end).getDays();

    System.out.println("Days = " + days);
 }
}

结果是Days = 42900