两个日期之间的天数。日期错误在哪里?
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
我正在尝试计算两个日期之间的天数。 这是我的代码:
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