#java #parsing #printing #jodatime #period
#java #синтаксический анализ #печать #jodatime #точка
Вопрос:
У меня возникла проблема при попытке напечатать определенный период между двумя датами.
Позвольте мне показать вам детали, а затем я введу код :
Дата a = 20 мая , Дата b = 19 июня
Промежуточный период должен составлять 30 дней. (или 29, не имеет значения)
Но, учитывая код, который у меня есть, он говорит, что это всего лишь 1 день.
Не могли бы вы помочь мне с этим, пожалуйста? Что я хотел бы, так это получить весь промежуточный период: 29 дней.
Спасибо.
public static void main(String args[]) {
Calendar calA = Calendar.getInstance();
calA.set(Calendar.MONTH, 5);
calA.set(Calendar.DAY_OF_MONTH, 20);
Calendar calB = Calendar.getInstance();
calB.set(Calendar.MONTH, 6);
calB.set(Calendar.DAY_OF_MONTH, 19);
DateTime da = new DateTime(calA.getTime());
DateTime db = new DateTime(calB.getTime());
Period p = new Period(da,db);
System.out.println(printPeriod(p));
}
private static String printPeriod(Period period) {
PeriodFormatter monthDaysHours = new PeriodFormatterBuilder()
.appendMonths()
.appendSuffix(" month"," months")
.appendSeparator(",")
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(",")
.appendHours()
.appendSuffix(" hour"," hours")
.toFormatter();
return monthDaysHours.print(period.normalizeStandardPeriodType());
}
Комментарии:
1. Вы понимаете, что ваши свидания на самом деле с 20 июня по 19 июля , верно? Просто как первая проблема…
2. Конечно, на 1 день меньше месяца. Фактические данные не имеют значения .. я просто хотел отразить факт за 1 месяц -1 день.
Ответ №1:
Период был создан как «4 недели и 1 день», но вы не распечатываете недели.
Предполагая, что вам нужен год / месяц / день / время, измените вызов конструктора периода на:
Period p = new Period(da, db, PeriodType.yearMonthDayTime());
а затем избавьтесь от вызова normalizeStandard()
(на самом деле я не смог найти вызываемый метод normalizeStandardPeriodType()
; я предполагаю, что это была опечатка.)
Конечно, это будет игнорировать любые годы в периоде. Потенциально вы могли бы использовать:
PeriodType pt = PeriodType.yearMonthDayTime().withYearsRemoved();
Period p = new Period(da, db, pt);