Ошибка в Периоде печати с помощью JodaTime?

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