使用Joda-Time计算从1900-01-01
到1918-03-24
之后的日期之间的天数似乎会得到一个偏移一天的结果。
使用Java 8的java.time
可以得到正确的结果。为什么Joda-Time没有计算1918-03-25
?
使用Joda-time v2.9.9。
public static void main(String[] args) {
jodaDiff("1918-03-24");
javaDiff("1918-03-24");
jodaDiff("1918-03-25");
javaDiff("1918-03-25");
jodaDiff("1918-03-26");
javaDiff("1918-03-26");
jodaDiff("2017-10-10");
javaDiff("2017-10-10");
}
private static void jodaDiff(String date) {
DateTime start = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeZone.forID("UTC"));
DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-dd");
DateTime end = dateDecoder.parseDateTime(date);
int diff = Days.daysBetween(start, end).getDays();
System.out.println("Joda " + date + " " + diff);
}
private static void javaDiff(String date) {
LocalDate start = LocalDate.parse("1900-01-01");
LocalDate end = LocalDate.parse(date);
int diff = (int) ChronoUnit.DAYS.between(start, end);
System.out.println("Java " + date + " " + diff + "\n");
}
输出:
Joda 1918年3月24日 6656
Java 1918年3月24日 6656Joda 1918年3月25日 6656
Java 1918年3月25日 6657Joda 1918年3月26日 6657
Java 1918年3月26日 6658Joda 2017年10月10日 43015
Java 2017年10月10日 43016