Как вычесть две даты joda?

Я знаю, что это «не так, как должно работать», но все же: если у вас есть два объекта DateTime, как лучше их вычесть? Преобразовать их в объекты Date?

DateTime start = new DateTime();
System.out.println(start + " - doing some stuff");

// do stuff

DateTime end = new DateTime();
Period diff = // end - start ???
System.out.println(end + " - doing some stuff took diff seconds");

person ripper234    schedule 04.04.2013    source источник
comment
Это должно вам помочь.   -  person karmanaut    schedule 04.04.2013
comment
@karmanaut - спасибо, закрываю как дубли.   -  person ripper234    schedule 04.04.2013
comment
@karmanaut На самом деле этот вопрос не относится к той же теме. Он считает количество дней между двумя моментами, а не общий способ перехода от начальной и конечной даты к периоду.   -  person millimoose    schedule 04.04.2013
comment
См. Это: stackoverflow .com / questions / 1555262 /   -  person Parkash Kumar    schedule 04.04.2013
comment
@ParkashKumar Хороший улов, Interval, вероятно, лучше для этого использования.   -  person millimoose    schedule 04.04.2013
comment
@millimoose, возможно, OP не будет использовать метод .getDays (), чтобы получить дни между двумя днями. Но ты прав. Вот официальный документ по этому поводу.   -  person karmanaut    schedule 04.04.2013


Ответы (5)


Период имеет конструктор, который принимает два ReadableInstant экземпляра:

Period diff = new Period(start, end);

(ReadableInstant - это интерфейс, реализованный DateTime, а также другими классами.)

person millimoose    schedule 04.04.2013

Из вашего примера кажется, что вам нужна разница в секундах, поэтому это должно помочь:

Seconds diff = Seconds.secondsBetween(start, end);
person bowmore    schedule 04.04.2013

Это помогает? http://joda-time.sourceforge.net/key_period.html Здесь показано следующее пример

DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2006, 1, 1, 0, 0, 0, 0);

// period of 1 year and 7 days
Period period = new Period(start, end);

// calc will equal end
DateTime calc = start.plus(period);

// able to calculate whole days between two dates easily
Days days = Days.daysBetween(start, end);
person Rush    schedule 04.04.2013

Зависит от того, какую точность вы хотите получить. Вы должны проверить пакет org.joda.time и проверить наличие вспомогательных классов, таких как Hours, Days и т. Д.

person Caesar Ralf    schedule 04.04.2013

Я думаю, вы можете создать Period, используя this, который принимает два DateTime объекта.

person tehlexx    schedule 04.04.2013