2015-09-14 1 views
2

Как найти дробную разницу в днях между двумя экземплярами даты Joda-Time DateTime?Дробное количество дней между объектами DateTime в Java

Days.daysBetween (начало, конец) .getDays() дает мне круглое число, как 10/15 и т.д. Что мне нужно, чтобы получить это точное значение как 10,15 или 15,78

+1

Используйте 'Hours.hoursBetween',' getHours' и разделите его на '24.0'. –

+0

@SotiriosDelimanolis твоя идея милая/простая. С минимальными изменениями :) – CodeMonkey

+1

В работе с датой времени такие фракции обычно не используются. Так что никакой такой функции. Обратите внимание, что Joda-Time предоставляет три класса для представления промежутка времени различными способами: ['Duration'] (http://www.joda.org/joda-time/apidocs/org/joda/time/Duration.html) , ['Period'] (http://www.joda.org/joda-time/apidocs/org/joda/time/Period.html) и [' Интервал'] (http://www.joda.org /joda-time/apidocs/org/joda/time/Interval.html). Эти классы могут анализировать и генерировать стандартные строки [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601#Durations), такие как «PT3H30M» в течение трех с половиной часов. –

ответ

0

Вычтите время в Millis и разделить по количеству Millis в день:

double diff = (end.getMillis() - start.getMillis())/86400000d; 

Test

DateTime start = new DateTime(2015, 1, 1, 0, 0, 0, 0); // Jan 1, 2015 
DateTime end = new DateTime(2015, 7, 4, 14, 23, 55, 876); // Jul 4, 2015 at 2:23:55.876 PM 

final int MILLIS_PER_DAY = 24 * 60 * 60 * 1000; // 86_400_000 
double diff = (double)(end.getMillis() - start.getMillis())/MILLIS_PER_DAY; 
System.out.println(diff); 

int days = (int)diff; 
diff = (diff - days) * 24; 
int hours = (int)diff; 
diff = (diff - hours) * 60; 
int minutes = (int)diff; 
diff = (diff - minutes) * 60; 
int seconds = (int)diff; 
diff = (diff - seconds) * 1000; 
int millis = (int)Math.round(diff); 
System.out.println(days + " days, " + 
        hours + " hours, " + 
        minutes + " minutes, " + 
        seconds + " seconds, " + 
        millis + " millis"); 

Выход

184.55828560185185 
184 days, 13 hours, 23 minutes, 55 seconds, 876 millis 

Обратите внимание, что это только 13 часов, а не 14, из-за летнего времени.

1

Вы можете пропустить минуты из-за закругления, если вы используете Hours.hoursBetween.

Попробуйте это: (end.getMillis - start.getMillis())/(1000 * 3600 * 24)

0

Спасибо за вход от комментариев, я получил это работает точно секунды с помощью:

double days = Seconds.secondsBetween(start, end).getSeconds()/86400; 
Смежные вопросы