diff --git a/src/main/java/sk/kasv/babcak/Christmas.java b/src/main/java/sk/kasv/babcak/Christmas.java index b48d7dcfa082ddbaa8432df740c9083d6dec5bcf..d5ac01971ddef7d9a12052f6fa0d701bc66e745f 100644 --- a/src/main/java/sk/kasv/babcak/Christmas.java +++ b/src/main/java/sk/kasv/babcak/Christmas.java @@ -1,5 +1,7 @@ package sk.kasv.babcak; +import sk.kasv.babcak.worldx.model.DayMonthYear; + import java.util.regex.*; public class Christmas { public boolean regexChristmas(String date){ @@ -8,4 +10,36 @@ public class Christmas { Matcher matcher = pattern.matcher(date); return matcher.matches(); } + + public DayMonthYear parseDate(String date){ + int day, month, year; + day = Integer.parseInt(date.substring(8,9)); + month = Integer.parseInt(date.substring(5,7)); + year = Integer.parseInt(date.substring(0,4)); + + boolean result = checkDateValue(day,month,year); + if(result){ + DayMonthYear dmy = new DayMonthYear(day, month, year); + return dmy; + } else { + return null; + } + } + + public boolean checkDateValue(int d, int m, int y){ + if (d < 1 || d > 31 || m > 12 || m < 1 || y < 1900 || y > 2099) + return false; + if ( (m == 4 || m == 6 || m == 9 || m == 11) && d == 31) + return false; + if (m == 2) { + if (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) { + if (d > 29) + return false; + } else { + if (d > 28) + return false; + } + } + return true; + } } \ No newline at end of file diff --git a/src/main/java/sk/kasv/babcak/worldx/model/DayMonthYear.java b/src/main/java/sk/kasv/babcak/worldx/model/DayMonthYear.java new file mode 100644 index 0000000000000000000000000000000000000000..d5d4eed29d24f1445c517eeaa2ff37cde434d510 --- /dev/null +++ b/src/main/java/sk/kasv/babcak/worldx/model/DayMonthYear.java @@ -0,0 +1,15 @@ +package sk.kasv.babcak.worldx.model; + +public class DayMonthYear { + private int day; + + private int month; + + private int year; + + public DayMonthYear(int day, int month, int year){ + this.day = day; + this.month = month; + this.year = year; + } +} \ No newline at end of file diff --git a/src/main/java/sk/kasv/babcak/worldx/servercontroller/ChristmasController.java b/src/main/java/sk/kasv/babcak/worldx/servercontroller/ChristmasController.java index b78fbcfb7b0317a7db10b2f9df318ef8ac7a00ab..107da69ad4009f9980a3e0e00771d08a055b74a4 100644 --- a/src/main/java/sk/kasv/babcak/worldx/servercontroller/ChristmasController.java +++ b/src/main/java/sk/kasv/babcak/worldx/servercontroller/ChristmasController.java @@ -5,8 +5,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import sk.kasv.babcak.Christmas; +import sk.kasv.babcak.worldx.model.DayMonthYear; -import java.util.Date; +import java.time.LocalDate; +import java.time.Period; @RestController public class ChristmasController { @@ -17,6 +19,32 @@ public class ChristmasController { if(!result){ return ResponseEntity.status(400).body("{\"error\":\"incorrect date format (YYYY-MM-DD)\"}"); } - return ResponseEntity.status(200).body("Date is OK"); + + ch.parseDate(dateValue); + int days = calculateDaysToChristmas(dateValue); + int months = calculateMonthsToChristmas(dateValue); + return ResponseEntity.status(200).body("{\"monthsToChristmas\":"+months+",\"daysToChristmas\":"+days+"}"); + } + + private int calculateDaysToChristmas(String dateValue) { + LocalDate date = LocalDate.parse(dateValue); + LocalDate christmas = LocalDate.of(date.getYear(),12, 25); + + if (date.isAfter(christmas)) { + christmas = christmas.plusYears(1); + } + + return Period.between(date, christmas).getDays(); + } + + private int calculateMonthsToChristmas(String dateValue) { + LocalDate date = LocalDate.parse(dateValue); + LocalDate christmas = LocalDate.of(date.getYear(),12, 25); + + if (date.isAfter(christmas)) { + christmas = christmas.plusYears(1); + } + + return (int) Period.between(date, christmas).toTotalMonths(); } } \ No newline at end of file diff --git a/src/main/java/sk/kasv/babcak/worldx/servercontroller/MainAPI.java b/src/main/java/sk/kasv/babcak/worldx/servercontroller/MainAPI.java index 673535b282dc771a3e72e45a13e0ebaa59febf01..c8d7be73e947b7223ce4f49538b4ef0ca37a29dc 100644 --- a/src/main/java/sk/kasv/babcak/worldx/servercontroller/MainAPI.java +++ b/src/main/java/sk/kasv/babcak/worldx/servercontroller/MainAPI.java @@ -8,5 +8,4 @@ public class MainAPI { public static void main(String[] args) { SpringApplication.run(sk.kasv.babcak.worldx.servercontroller.MainAPI.class, args); } - } \ No newline at end of file diff --git a/src/test/java/sk/kasv/babcak/ChristmasTest.java b/src/test/java/sk/kasv/babcak/ChristmasTest.java index dae942c2708b51044a2fc8dbee55e1421bc847c8..52be08bce2d101579bc8ff46a471c495c32b86ce 100644 --- a/src/test/java/sk/kasv/babcak/ChristmasTest.java +++ b/src/test/java/sk/kasv/babcak/ChristmasTest.java @@ -21,4 +21,22 @@ class ChristmasTest { assertFalse(ch.regexChristmas("2015-11-32")); assertFalse(ch.regexChristmas("1999-00-05")); } + + @Test + void checkDateValue(){ + Christmas ch = new Christmas(); + assertTrue(ch.checkDateValue(12,5,2024)); + assertTrue(ch.checkDateValue(31, 12, 2000)); + assertTrue(ch.checkDateValue(28, 2, 2020)); + + assertFalse(ch.checkDateValue(0,1,2000)); + assertFalse(ch.checkDateValue(32,12,2000)); + assertFalse(ch.checkDateValue(30,2,2020)); + assertFalse(ch.checkDateValue(29,2,2021)); + assertFalse(ch.checkDateValue(31,4,2023)); + assertFalse(ch.checkDateValue(31,4,2100)); + assertFalse(ch.checkDateValue(18,15,2019)); + assertFalse(ch.checkDateValue(18,0,2019)); + assertFalse(ch.checkDateValue(0,7,2019)); + } } \ No newline at end of file