diff --git a/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingCalendar.java b/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingCalendar.java new file mode 100644 index 0000000000..db32421aa4 --- /dev/null +++ b/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingCalendar.java @@ -0,0 +1,41 @@ +package com.baeldung.weeknumber; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class WeekNumberUsingCalendar { + + public int getWeekNumberFrom(String day, String dateFormat, Locale locale) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); + + Calendar calendar = Calendar.getInstance(locale); + Date date = sdf.parse(day); + calendar.setTime(date); + + return calendar.get(Calendar.WEEK_OF_YEAR); + } + + public int getWeekNumberFrom(int year, int month, int day, Locale locale) { + Calendar calendar = Calendar.getInstance(locale); + calendar.set(year, month, day); + + return calendar.get(Calendar.WEEK_OF_YEAR); + } + + public int getWeekNumberFrom(int year, int month, int day, int firstDayOfWeek, int minimalDaysInFirstWeek, Locale locale) { + Calendar calendar = Calendar.getInstance(locale); + calendar.setFirstDayOfWeek(firstDayOfWeek); + calendar.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek); + calendar.set(year, month, day); + + return calendar.get(Calendar.WEEK_OF_YEAR); + } + + public static void main(String[] args) { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + System.out.println(calendar.getWeekNumberFrom(2020, 2, 22, Locale.CANADA)); + } +} diff --git a/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingLocalDate.java b/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingLocalDate.java new file mode 100644 index 0000000000..4e1b7be3be --- /dev/null +++ b/core-java-modules/core-java-date-operations-2/src/main/java/com/baeldung/weeknumber/WeekNumberUsingLocalDate.java @@ -0,0 +1,30 @@ +package com.baeldung.weeknumber; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoField; +import java.time.temporal.WeekFields; +import java.util.Locale; + +public class WeekNumberUsingLocalDate { + + public Integer getWeekNumberUsingWeekFiedsFrom(String day, String dayFormat, Locale locale) { + LocalDate date = LocalDate.parse(day, DateTimeFormatter.ofPattern(dayFormat)); + + return date.get(WeekFields.of(locale) + .weekOfYear()); + } + + public Integer getWeekNumberUsinWeekFieldsFrom(int year, int month, int day, Locale locale) { + LocalDate date = LocalDate.of(year, month, day); + + return date.get(WeekFields.of(locale) + .weekOfYear()); + } + + public Integer getWeekNumberUsingChronoFieldFrom(int year, int month, int day) { + LocalDate date = LocalDate.of(year, month, day); + + return date.get(ChronoField.ALIGNED_WEEK_OF_YEAR); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingCalendarUnitTest.java b/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingCalendarUnitTest.java new file mode 100644 index 0000000000..587a459277 --- /dev/null +++ b/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingCalendarUnitTest.java @@ -0,0 +1,46 @@ +package com.baeldung.weeknumber; + +import static org.junit.Assert.assertEquals; + +import java.text.ParseException; +import java.util.Calendar; +import java.util.Locale; + +import org.junit.Test; + +public class WeekNumberUsingCalendarUnitTest { + @Test + public void givenDateInStringAndDateFormatUsingLocaleItaly_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() throws ParseException { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + + assertEquals(12, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.ITALY)); + } + + @Test + public void givenDateInStringAndDateFormatUsingLocaleCanada_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() throws ParseException { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + + assertEquals(13, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.CANADA)); + } + + @Test + public void givenDateInYearMonthDayNumbersLocaleItaly_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + + assertEquals(12, calendar.getWeekNumberFrom(2020, 2, 22, Locale.ITALY)); + } + + @Test + public void givenDateInYearMonthDayNumbersLocaleItalyChangingWeekCalculationSettings_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + + assertEquals(13, calendar.getWeekNumberFrom(2020, 2, 22, Calendar.SUNDAY, 4, Locale.ITALY)); + } + + @Test + public void givenDateInYearMonthDayNumbersLocaleCanada_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() { + WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); + + assertEquals(13, calendar.getWeekNumberFrom(2020, 2, 22, Locale.CANADA)); + } +} diff --git a/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingLocalDateUnitTest.java b/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingLocalDateUnitTest.java new file mode 100644 index 0000000000..9b98222ece --- /dev/null +++ b/core-java-modules/core-java-date-operations-2/src/test/java/com/baeldung/weeknumber/WeekNumberUsingLocalDateUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.weeknumber; + +import static org.junit.Assert.assertEquals; + +import java.util.Locale; + +import org.junit.Test; + +public class WeekNumberUsingLocalDateUnitTest { + @Test + public void givenDateInStringAndDateFormatUsingWeekFieldsWithLocaleItaly_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { + WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); + + assertEquals(12, localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.ITALY) + .longValue()); + } + + @Test + public void givenDateInStringAndDateFormatUsingWeekFieldsWithLocaleCanada_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { + WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); + + assertEquals(13, localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.CANADA) + .longValue()); + } + + @Test + public void givenDateInStringAndDateFormatUsingChronoFieds_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { + WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); + + assertEquals(12, localDate.getWeekNumberUsingChronoFieldFrom(2020, 3, 22) + .longValue()); + } + + @Test + public void givenDateInYearMonthDayNumbersUsingWeekFieldsWithLocaleItaly_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { + WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); + + assertEquals(12, localDate.getWeekNumberUsinWeekFieldsFrom(2020, 3, 22, Locale.ITALY) + .longValue()); + } + + @Test + public void givenDateInYearMonthDayNumbersUsingWeekFieldsWithLocaleCanada_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { + WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); + + assertEquals(13, localDate.getWeekNumberUsinWeekFieldsFrom(2020, 3, 22, Locale.CANADA) + .longValue()); + } +}