Joda Время минуты в продолжительности или интервале - PullRequest
5 голосов
/ 09 февраля 2012

У меня есть этот простой код:

DateTime date = new DateTime(dateValue);
DateTime currentDate = new DateTime(System.currentTimeMillis());

System.out.println("date: " + date.toString());
System.out.println("currentDate: " + currentDate.toString());

Period period = new Period(currentDate, date);
System.out.println("PERIOD MINUTES: " + period.getMinutes());
System.out.println("PERIOD DAYS: " + period.getDays());

Duration duration = new Duration(currentDate, date);
System.out.println("DURATION MINUTES: " + duration.getStandardMinutes());
System.out.println("DURATION DAYS: " + duration.getStandardDays());

Я пытаюсь просто узнать количество дней и минут между двумя случайными датами.

Это вывод для этой частикода:

date: 2012-02-09T00:00:00.000+02:00
currentDate: 2012-02-09T18:15:40.739+02:00
PERIOD MINUTES: -15
PERIOD DAYS: 0
DURATION MINUTES: -1095
DURATION DAYS: 0

Я предполагаю, что я делаю что-то не так, я просто не вижу, что.

Ответы [ 2 ]

13 голосов
/ 09 февраля 2012

Проблема в том, что вы не указываете тип периода в конструкторе периодов - поэтому он использует значение по умолчанию «годы, месяцы, недели, дни, часы, минуты, секунды и миллис».Вы видите только 15 минут, потому что вы не просите часы, которые вернут -18.

Если вам нужны только дни и минуты, вы должны указать следующее:

PeriodType type = PeriodType.forFields(new DurationFieldType[] {
                                           DurationFieldType.days(),
                                           DurationFieldType.minutes()
                                       });

Period period = new Period(currentDate, date, type);
// Now you'll just have minutes and days

Важно понимать разницу между Duration, который представляет собой «определенное количество миллисекунд, которое может быть получено в соответствии с различными единицами измерения», и Period, который фактически является отображением из набора типов полей (минут, месяцевдней и т. д.) ценностям.В периоде нет единственного значения времени - это набор значений.

3 голосов
/ 09 февраля 2012

Похоже, что он работает просто отлично, все, что вам нужно сделать, чтобы получить положительные значения, это поменять местами date и currentDate:

Period period = new Period(date, currentDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...