#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)