计算使用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乔达(Joda)1918-03-25 6656
Java 1918-03-25 6657乔达(Joda)1918-03-26 6657
Java 1918-03-26 6658乔达2017-10-10 43015
Java 2017-10-10 43016
问题是您DateTimeFormatter
使用的是系统默认时区。理想情况下,您应该解析为LocalDate
值而不是DateTime
,但是无论如何您都可以通过将UTC用作格式化程序来解决它:
DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-dd").withZoneUTC();
要解析LocalDate
,只需使用:
org.joda.time.LocalDate start = new org.joda.time.LocalDate(1900, 1, 1);
DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-dd");
org.joda.time.LocalDate end = dateDecoder.parseLocalDate(date);
(显然,如果您不使用Java 8,则不需要完全限定它。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句