Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: RichardОтветов: 1

У меня странное поведение при расчете периода 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, что дает другой результат?

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

javadatewolfram-mathematicajodatime

Ответы

Ответ 1 · рейтинг 4 · Andy Turner

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

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.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы