2016-03-17 2 views
1

Мне нужно сохранить начало Дата начала постоянной для первой итерации и добавить дату окончания с единицей, и итерация должна произойти до начала даты до конечных данных.Добавление разницы между датами с постоянным модулем

Пример:

Разница между датой начала (1/1/2015) и конечной даты (12/31/2015) составляет 12 месяцев

и блок 4 месяца

затем Я должен получить

Contract Start date  End date 
1   1/1/2015  4/31/2015 
2   5/1/2015  8/31/2015 
3   9/1/2015  12/31/2015 

КОД Я пробовал:

private void contractDetails(List<PolicyPeriodFormulaType> policyPeriod){ 


    for (PolicyPeriodFormulaType policyPeriodFormulaType : policyPeriod) { 
     Date effectiveDateFrom = policyPeriodFormulaType.getEffectivePeriod().getEffectiveFrom(); 
     Date effectiveDateTo = policyPeriodFormulaType.getEffectivePeriod().getEffectiveTo(); 
     Instant effectiveFrom = effectiveDateFrom.toInstant(); 
     ZonedDateTime zdt = effectiveFrom.atZone(ZoneId.systemDefault()); 
     LocalDate fromDate = zdt.toLocalDate(); 

     Instant effectiveTo = effectiveDateTo.toInstant(); 
     ZonedDateTime zdt1 = effectiveTo.atZone(ZoneId.systemDefault()); 
     LocalDate toDate = zdt.toLocalDate(); 



     int unit = policyPeriodFormulaType.getUnits(); 
     String unitMeasurement = policyPeriodFormulaType.getUnitOfMeasurement(); 
     Period p = Period.between(fromDate,toDate); 
     int months = p.getMonths(); 
     int years = p.getYears(); 
     if(unitMeasurement.equalsIgnoreCase("Month")){ 
      months = months+(years*12); 
     } 
     int duration = months/unit; // 12/4 = 3 
     int i =0; 
     while(fromDate.isBefore(toDate)){ 
      fromDate=fromDate; 
      toDate=fromDate.plusMonths(unit); 
      fromDate=toDate.plusMonths(unit); 
     } 


    } 



} 
+0

@mikecat_mixc, вы можете сказать мне, пожалуйста, где я буду неправильно –

+0

Что вы имеете в виду под «вы должны получить» таблицу вы говорите вы должны получить? Ваш код ничего не выводит, поэтому я не знаю, как вы планируете «получить» эту таблицу. Если вы просто говорите об этом значениях определенных переменных в определенных точках, вы не сказали нам **, которые ** переменные в **, которые ** указывают. – ajb

+0

Я должен получить средства, ожидаемый результат должен быть таким, как над таблицей. –

ответ

1

Честно говоря, вы должны использовать либо Java-8 в Date/Time API или Joda-Time в той или иной форме, например ...

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yyyy"); 
LocalDate startDate = LocalDate.parse("01/01/2015", dtf); 
LocalDate endDate = LocalDate.parse("12/31/2015", dtf); 

LocalDate date = startDate; 

Period period = Period.parse("P4M"); 
// or 
//Period period = Period.ofMonths(4); 
// or 
//Period period = Period.of(0, 4, 0); 

while (date.isBefore(endDate)) { 
    LocalDate to = date.plus(period); 
    System.out.println(dtf.format(date) + " - " + dtf.format(to.minusDays(1))); 
    date = to; 
} 

который печатает

01/01/2015 - 04/30/2015 
05/01/2015 - 08/31/2015 
09/01/2015 - 12/31/2015 

От того, это Wouldn 'слишком сложно растянуть, чтобы создать класс контейнера (то есть класс стиля Contract), чтобы содержать значения to-from. Затем вы можете использовать Comparable или Comparator, чтобы держать их отсортированный в какой-то List или массива

0

Смотрите ниже код:

//fromDate->starting date, toDate->endDate 
int duration = months/unit; // 12/4 = 3 
int i =1; 
//printing data 
System.out.println("Contract Start date  End date") 
while(fromDate.isBefore(toDate)){ 
    //get current duration, from to end 
    LocalDate currentUnitEndDate = fromDate.plusMonths(unit); 
    // printing index, current time, end time for current phase. 
    System.out.println(i+" "+fromDate"  "+ currentUnitEndDate); 
    //increment from date to unit no of months. 
    fromDate=fromDate.plusMonths(unit); 
    i++; 
} 
Смежные вопросы