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

时间:2017-06-17 09:30:00

标签: java date calculation

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

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 enter image description here

拜托,有谁能解释一下我的真相结果在哪里?

2 个答案:

答案 0 :(得分:2)

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错误地添加

答案 1 :(得分:0)

使用Joda Time。它有一个更好的API,可以在Java的标准库中找到。以下是我的案例代码:

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