2016-01-13 3 views
2

Я делаю некоторые модульное тестирование и произошло через это:Есть ли org.joda.time.Period уважать високосные годы?

2015 (не високосный год)

LocalDate endDate = LocalDate.parse("01/03/2015", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter()); 
LocalDate startDate = LocalDate.parse("25/02/2015", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter()); 

org.joda.time.Period.fieldDifference(startDate, endDate).getDays(); // is -24 

2016 (Високосный год)

LocalDate endDate = LocalDate.parse("01/03/2016", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter()); 
LocalDate startDate = LocalDate.parse("25/02/2016", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter()); 

org.joda.time.Period.fieldDifference(startDate, endDate).getDays(); // is ALSO -24 

Я бы ожидать, что эти значения быть по крайней мере разным.

Любые идеи?

+0

Упс. Это была опечатка в образце, я исправил ее сейчас. – HellishHeat

ответ

4

Док для fieldDifference говорит

Расчет по разнице полевых работ путем выделения одного поля разница в то время и не оборачивать в других областях. Таким образом, 2005-06-09/2007-04-12 даст P1Y-2M3D.

Разница в поле день между "01/03/2016" и "25/02/2016" является 1 - 25 = -24. Он не говорит, что это количество дней между двумя датами. -24 не имеет смысла как количество дней между этими двумя датами в любой год.

Чтобы найти количество дней между двумя датами, вы можете использовать

org.joda.time.Days.daysBetween(startDate, endDate).getDays() 

, который действительно будет возвращать другое число в 2015 году с 2016 года, если она пересекает конец февраля.

+0

Я понял это (месяц минус 24 дня). Но разве он не должен отличаться для високосного года? org.joda.time.Period.fieldDifference (startDate, endDate) .getMonths(); 1 в обоих случаях. getDays() равен -24, в обоих случаях. – HellishHeat

+0

Кроме того, это не то, что я хочу, я застрял с «Period.fieldDifference». Я просто хочу знать, почему он возвращает такое же количество дней для прыжков и непиковых лет. – HellishHeat

+4

'fieldDifference' просто говорит вам разницу между двумя полями. Разница между '25' и' 1' составляет '-24'. Это то, что вам говорят. Если вы хотите что-то другое, используйте другой метод. – khelwood

Смежные вопросы