BAEL-3912 - Java: Get week number from any date?

This commit is contained in:
Jonathan Cook 2020-05-25 23:08:23 +02:00
parent fd2c628b34
commit aa6d896b11
4 changed files with 29 additions and 36 deletions

View File

@ -8,11 +8,11 @@ import java.util.Locale;
public class WeekNumberUsingCalendar { public class WeekNumberUsingCalendar {
public int getWeekNumberFrom(String day, String dateFormat, Locale locale) throws ParseException { public int getWeekNumberFrom(String dateString, String dateFormat, Locale locale) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date date = sdf.parse(dateString);
Calendar calendar = Calendar.getInstance(locale); Calendar calendar = Calendar.getInstance(locale);
Date date = sdf.parse(day);
calendar.setTime(date); calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR); return calendar.get(Calendar.WEEK_OF_YEAR);
@ -25,8 +25,8 @@ public class WeekNumberUsingCalendar {
return calendar.get(Calendar.WEEK_OF_YEAR); return calendar.get(Calendar.WEEK_OF_YEAR);
} }
public int getWeekNumberFrom(int year, int month, int day, int firstDayOfWeek, int minimalDaysInFirstWeek, Locale locale) { public int getWeekNumberFrom(int year, int month, int day, int firstDayOfWeek, int minimalDaysInFirstWeek) {
Calendar calendar = Calendar.getInstance(locale); Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(firstDayOfWeek); calendar.setFirstDayOfWeek(firstDayOfWeek);
calendar.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek); calendar.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek);
calendar.set(year, month, day); calendar.set(year, month, day);
@ -34,8 +34,4 @@ public class WeekNumberUsingCalendar {
return calendar.get(Calendar.WEEK_OF_YEAR); 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));
}
} }

View File

@ -15,7 +15,7 @@ public class WeekNumberUsingLocalDate {
.weekOfYear()); .weekOfYear());
} }
public Integer getWeekNumberUsinWeekFieldsFrom(int year, int month, int day, Locale locale) { public Integer getWeekNumberUsingWeekFieldsFrom(int year, int month, int day, Locale locale) {
LocalDate date = LocalDate.of(year, month, day); LocalDate date = LocalDate.of(year, month, day);
return date.get(WeekFields.of(locale) return date.get(WeekFields.of(locale)

View File

@ -9,38 +9,40 @@ import java.util.Locale;
import org.junit.Test; import org.junit.Test;
public class WeekNumberUsingCalendarUnitTest { public class WeekNumberUsingCalendarUnitTest {
@Test @Test
public void givenDateInStringAndDateFormatUsingLocaleItaly_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() throws ParseException { public void givenDateFormatAndLocaleItaly_whenGetWeekNumber_thenWeekIsReturnedCorrectly() throws ParseException {
WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar();
assertEquals(12, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.ITALY)); assertEquals(12, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.ITALY));
} }
@Test @Test
public void givenDateInStringAndDateFormatUsingLocaleCanada_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() throws ParseException { public void givenDateFormatAndLocaleCanada_whenGetWeekNumber_thenWeekIsReturnedCorrectly() throws ParseException {
WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar();
assertEquals(13, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.CANADA)); assertEquals(13, calendar.getWeekNumberFrom("20200322", "yyyyMMdd", Locale.CANADA));
} }
@Test @Test
public void givenDateInYearMonthDayNumbersLocaleItaly_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() { public void givenDateUsingFieldsAndLocaleItaly_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar(); WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar();
assertEquals(12, calendar.getWeekNumberFrom(2020, 2, 22, Locale.ITALY)); assertEquals(12, calendar.getWeekNumberFrom(2020, 2, 22, Locale.ITALY));
} }
@Test @Test
public void givenDateInYearMonthDayNumbersLocaleItalyChangingWeekCalculationSettings_thenGettingWeekNumberUsingCalendarIsCorrectlyReturned() { public void givenDateUsingFieldsAndLocaleCanada_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
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(); WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar();
assertEquals(13, calendar.getWeekNumberFrom(2020, 2, 22, Locale.CANADA)); assertEquals(13, calendar.getWeekNumberFrom(2020, 2, 22, Locale.CANADA));
} }
@Test
public void givenDateUsingFieldsAndLocaleItaly_whenChangingWeekCalcSettings_thenWeekIsReturnedCorrectly() {
WeekNumberUsingCalendar calendar = new WeekNumberUsingCalendar();
assertEquals(13, calendar.getWeekNumberFrom(2020, 2, 22, Calendar.SUNDAY, 4));
}
} }

View File

@ -8,42 +8,37 @@ import org.junit.Test;
public class WeekNumberUsingLocalDateUnitTest { public class WeekNumberUsingLocalDateUnitTest {
@Test @Test
public void givenDateInStringAndDateFormatUsingWeekFieldsWithLocaleItaly_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { public void givenDateFormatAndLocaleItaly_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate();
assertEquals(12, localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.ITALY) assertEquals(Integer.valueOf(12), localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.ITALY));
.longValue());
} }
@Test @Test
public void givenDateInStringAndDateFormatUsingWeekFieldsWithLocaleCanada_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { public void givenDateFormatAndLocaleCanada_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate();
assertEquals(13, localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.CANADA) assertEquals(Integer.valueOf(13), localDate.getWeekNumberUsingWeekFiedsFrom("20200322", "yyyyMMdd", Locale.CANADA));
.longValue());
} }
@Test @Test
public void givenDateInStringAndDateFormatUsingChronoFieds_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { public void givenDateUsingChronoFields_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate();
assertEquals(12, localDate.getWeekNumberUsingChronoFieldFrom(2020, 3, 22) assertEquals(Integer.valueOf(12), localDate.getWeekNumberUsingChronoFieldFrom(2020, 3, 22));
.longValue());
} }
@Test @Test
public void givenDateInYearMonthDayNumbersUsingWeekFieldsWithLocaleItaly_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { public void givenDateUsingFieldsWithLocaleItaly_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate();
assertEquals(12, localDate.getWeekNumberUsinWeekFieldsFrom(2020, 3, 22, Locale.ITALY) assertEquals(Integer.valueOf(12), localDate.getWeekNumberUsingWeekFieldsFrom(2020, 3, 22, Locale.ITALY));
.longValue());
} }
@Test @Test
public void givenDateInYearMonthDayNumbersUsingWeekFieldsWithLocaleCanada_thenGettingWeekNumberUsingLocalDateIsCorrectlyReturned() { public void givenDateUsingFieldsWithLocaleCanada_whenGetWeekNumber_thenWeekIsReturnedCorrectly() {
WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate(); WeekNumberUsingLocalDate localDate = new WeekNumberUsingLocalDate();
assertEquals(13, localDate.getWeekNumberUsinWeekFieldsFrom(2020, 3, 22, Locale.CANADA) assertEquals(Integer.valueOf(13), localDate.getWeekNumberUsingWeekFieldsFrom(2020, 3, 22, Locale.CANADA));
.longValue());
} }
} }