【发布时间】:2017-10-10 09:29:58
【问题描述】:
使用 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");
}
输出:
乔达 1918-03-24 6656
Java 1918-03-24 6656乔达 1918-03-25 6656
Java 1918-03-25 6657乔达 1918-03-26 6657
Java 1918-03-26 6658乔达 2017-10-10 43015
Java 2017-10-10 43016
【问题讨论】:
-
使用 Java 8?和使用 Joda-time v2.9.9?,在此之前,您需要在完全了解它的工作原理后实现任何第三方库。我没有发现使用 Java 8 的任何问题?并使用 Joda-time v2.9.9,除了您在堆栈溢出时的特殊实现发布
标签: java datetime jodatime java-time date-difference