- Separated add and subtract days into two methods for simplification

This commit is contained in:
vatsalgosar 2019-11-09 02:33:50 +05:30
parent d74c31b3bf
commit 1e1fe0592e
2 changed files with 19 additions and 9 deletions

View File

@ -5,17 +5,27 @@ import java.time.LocalDate;
public class AddSubtractDaysSkippingWeekendsUtils { public class AddSubtractDaysSkippingWeekendsUtils {
public static LocalDate addSubtractDaysSkippingWeekendsIterativeMethod(LocalDate date, int days) { public static LocalDate addDaysSkippingWeekends(LocalDate date, int days) {
LocalDate result = date; LocalDate result = date;
int addedDays = 0; int addedDays = 0;
int absDays = Math.abs(days); while (addedDays < days) {
int day = (days > 0) ? 1 : -1; result = result.plusDays(1);
while (addedDays < absDays) {
result = result.plusDays(day);
if (!(result.getDayOfWeek() == DayOfWeek.SATURDAY || result.getDayOfWeek() == DayOfWeek.SUNDAY)) { if (!(result.getDayOfWeek() == DayOfWeek.SATURDAY || result.getDayOfWeek() == DayOfWeek.SUNDAY)) {
++addedDays; ++addedDays;
} }
} }
return result; return result;
} }
public static LocalDate subtractDaysSkippingWeekends(LocalDate date, int days) {
LocalDate result = date;
int subtractedDays = 0;
while (subtractedDays < days) {
result = result.minusDays(1);
if (!(result.getDayOfWeek() == DayOfWeek.SATURDAY || result.getDayOfWeek() == DayOfWeek.SUNDAY)) {
++subtractedDays;
}
}
return result;
}
} }

View File

@ -9,18 +9,18 @@ import java.time.LocalDate;
public class AddSubtractDaysSkippingWeekendsUtilsUnitTest { public class AddSubtractDaysSkippingWeekendsUtilsUnitTest {
@Test @Test
public void givenLocalDateAndDaysToAdd_thenAddDaysSkippingWeekendsUsingIterativeMethod() { public void givenLocalDateAndDaysToAdd_thenAddDaysSkippingWeekends() {
LocalDate initialDate = LocalDate.of(2019, 11, 7); LocalDate initialDate = LocalDate.of(2019, 11, 7);
LocalDate expectedDate = LocalDate.of(2019, 11, 13); LocalDate expectedDate = LocalDate.of(2019, 11, 13);
LocalDate result = AddSubtractDaysSkippingWeekendsUtils.addSubtractDaysSkippingWeekendsIterativeMethod(initialDate, 4); LocalDate result = AddSubtractDaysSkippingWeekendsUtils.addDaysSkippingWeekends(initialDate, 4);
assertEquals(expectedDate, result); assertEquals(expectedDate, result);
} }
@Test @Test
public void givenLocalDateAndDaysToAdd_thenSubtractDaysSkippingWeekendsUsingIterativeMethod() { public void givenLocalDateAndDaysToSubtract_thenSubtractDaysSkippingWeekends() {
LocalDate initialDate = LocalDate.of(2019, 11, 7); LocalDate initialDate = LocalDate.of(2019, 11, 7);
LocalDate expectedDate = LocalDate.of(2019, 11, 1); LocalDate expectedDate = LocalDate.of(2019, 11, 1);
LocalDate result = AddSubtractDaysSkippingWeekendsUtils.addSubtractDaysSkippingWeekendsIterativeMethod(initialDate, -4); LocalDate result = AddSubtractDaysSkippingWeekendsUtils.subtractDaysSkippingWeekends(initialDate, 4);
assertEquals(expectedDate, result); assertEquals(expectedDate, result);
} }