Расчет периода времени Джода

У меня странное поведение при расчете периода Joda-Time для получения чьего-то возраста. Если кто-то родился 5 января 1970 года, то на сегодняшний день ему должно быть 46 лет и 1 день. Однако, если я использую следующий расчет возраста:

LocalDate birthdate = new LocalDate(1970,1,5);
LocalDate today = new LocalDate();
Period period = new Period(birthdate, today, PeriodType.yearMonthDay());
int age = period.getYears();

И joda-time говорит, что период равен P45Y1D. Я попробовал это на wolfram, чтобы убедиться, что я Я не сумасшедший и со мной согласен. Что здесь делает joda-time, что дает другой результат?


person Richard    schedule 06.01.2016    source источник
comment
Какие часы установлены в вашей системе? Я только что запустил ваш код на своей машине, и он напечатал P46Y1D   -  person Danny    schedule 06.01.2016
comment
Может глупый вопрос, но правильно ли выставлены часы вашего компьютера? :) (Возможно, стоит уточнить у LocalDate today = new LocalDate(2016, 1, 6);)   -  person Andy Turner    schedule 06.01.2016
comment
Возможно, попробуйте установить «сегодня» вручную (новый LocalDate (2016, 1, 6)), чтобы сузить проблему.   -  person rethab    schedule 06.01.2016
comment
Да, как-то часы сбились. Я все еще застрял в 2015 году, поэтому я просто даже не заметил, что это был год даты, который он использовал для расчета.   -  person Richard    schedule 06.01.2016
comment
@AndyTurner или Ричард… Пожалуйста, опубликуйте ответ на основе ваших комментариев, чтобы его можно было принять и считать закрытым. Или отозвать вопрос.   -  person Basil Bourque    schedule 07.01.2016


Ответы (1)


Я считаю, что это потому, что часы вашего компьютера установлены неправильно. Жесткое кодирование даты следующим образом дает ожидаемый результат:

LocalDate birthdate = new LocalDate(1970,1,5);
LocalDate today = new LocalDate(2016, 1, 6);  // Rather than relying on system clock. 
Period period = new Period(birthdate, today, PeriodType.yearMonthDay());
int age = period.getYears();  // 46.
person Andy Turner    schedule 06.01.2016