我正在尝试计算两个日期之间的天数。 这是我的代码:
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天。
拜托,有谁能解释一下我的真相结果在哪里?
答案 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