Найти оставшиеся день и время с помощью jodatime

#java #android #jodatime

#java #Android #jodatime

Вопрос:

Я хочу сравнить (найти оставшиеся дни и время между двумя днями), используя время joda. Я беру два объекта DateTime, подобных этому (один начинается, а другой заканчивается)

 DateTime endDate  = new DateTime(2011,12,25,0,0,0,0);   
DateTime strtDate = new DateTime();
  

Теперь мне интересно найти оставшиеся дату и время следующим образом
days:49 Hrs:5 Min:52 Sec:45 (Здесь не рассматриваются год и месяц ..)

Теперь я продолжаю работу с классом period следующим образом

 Period period = new Period();

PeriodFormatter formatter = new PeriodFormatterBuilder()
    .appendSeconds()
    .appendMinutes()
    .appendHours()
    .appendDays()
    .appendMonths()
    .appendYears()
    .printZeroNever()
    .toFormatter();
  

Теперь в результате я получаю год, месяц, день и т.д…
в этом случае я получу дни между 1-30 (не 31,45,49…(что я хочу)) всегда.

Итак, как я могу получить эту вещь (есть ли какой-либо метод, которого мне не хватает), или мне нужно обработать это программно, поскольку я читал, что время joda очень гибкое, поэтому я очень уверен, что будет какой-либо подобный метод.

Если вы знакомы, то, пожалуйста, поделитесь своими знаниями.

Ответ №1:

Определяет все стандартные поля, начиная с дней и ниже, с помощью periodType.dayTime().

Например :

 DateTime startDate = DateTime.now(); // now() : since Joda Time 2.0
DateTime endDate = new DateTime(2011, 12, 25, 0, 0);

Period period = new Period(startDate, endDate, PeriodType.dayTime());

PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendDays().appendSuffix(" day ", " days ")
        .appendHours().appendSuffix(" hour ", " hours ")
        .appendMinutes().appendSuffix(" minute ", " minutes ")
        .appendSeconds().appendSuffix(" second ", " seconds ")
        .toFormatter();

System.out.println(formatter.print(period));
  

Пример вывода

Период между startDate и endDate равен

47 дней 12 часов 46 минут 47 секунд


Или

 PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendPrefix("Day:", " Days:").appendDays()
        .appendPrefix(" Hour:", " Hours:").appendHours()
        .appendPrefix(" Minute:", " Minutes:").appendMinutes()
        .appendPrefix(" Second:", " Seconds:").appendSeconds()
        .toFormatter();
  

с выводом

Дней: 47 Часов: 12 минут: 46 секунд:47

Комментарии:

1. Привет, я благодарю вас, он отлично работает, не смог найти, что PeiodType является ключевым для этого.

2. Великий человек! это решило мою проблему с поиском за 2 недели! Спасибо @Ischin

3. Спасибо, работает безупречно! Я не использовал параметр periodType.dayTime ().

Ответ №2:

Если вы хотите, чтобы выходные данные были в более красивом формате, вы также можете использовать этот фрагмент

 val startDate = DateTime.now()
val endDate = DateTime(endTime)
val period = Period(startDate, endDate)

val periodFormatter = PeriodFormatterBuilder().apply {
    when {
        period.days > 0 -> appendDays().appendSuffix(" day", " days")
        period.hours > 0 -> appendHours().appendSuffix(" hour", " hours")
        period.minutes > 0 -> appendMinutes().appendSuffix(" minute", " minutes")
    }
}.toFormatter()

periodFormatter.print(period)