๐ง ์ฅ์ ๋ก๊ทธ. ๋งคํด ์ฃผ ์ฐจ(week) ๊ณ์ฐ์ ์ค๋ฅ
์ด์ ๋ฐ์
2018๋ 12์ 30์ผ ์ผ์์ผ ์๋ฒฝ์ด์์ต๋๋ค.
๋น์ ์๋น์ค ์ค์ด๋ ๊ฒ์์๋ ๋งค์ฃผ ์ฌ์ฉ์๋ค๋ผ๋ฆฌ ๊ฒฝ์ํด์ ์์์ผ์ ๊ธฐ์ ์ผ๋ก ๋ณด์์ ์ฃผ๊ณ ์ด๊ธฐํํ๋ ์์คํ ์ด ์์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์์์ผ๋ ์๋๊ณ ์ผ์์ผ ์๋ฒฝ์ ํด๋น ์์คํ ์ด ์ด๊ธฐํ ๋ผ๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ง์นจ, ์ปค๋ฎค๋ํฐ๋ฅผ ๋ชจ๋ํฐ๋ง ์ค์ด๋ ์ด์ํ์ด ๋ฌธ์ ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํด์ ๋ญํน์ด ๋ฆฌ์ ๋๋ค๋ ์ฅ์ ๋ณด๊ณ ๋ฅผ ์ ํํ๊ณ , ๋น์ ์ง์ด ๊ฐ์ฅ ๊ฐ๊น์ ๋ ์ ๊ฐ ๋จผ์ ํ์ฌ๋ก ๋ฌ๋ ค๊ฐ์ ์์ธ ๋ถ์์ ์์ํ์ต๋๋ค. ๋ฌธ์ ๋ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ ๋ถ๋ถ์์ ๋ฐ์ํ๊ณ ์์์ต๋๋ค.
์ฌ์ฉ์๋ค์ด ๊ฒฝ์ํ ๊ธฐ๋ก์ DB์ ๋จ๊ธธ ๋ ์ฐ๋์ ๊ทธํด์ ์ฃผ ์ฐจ๋ฅผ ์กฐํฉํ ๊ฐ์ ํค๊ฐ์ผ๋ก ์ฌ์ฉํด ๊ธฐ๋กํ๊ณ ์์๋๋ฐ, 12์ 30์ผ๋ก ๋์ด๊ฐ๋ฉด์ ์ฃผ ์ฐจ๊ฐ ๋ฆฌ์ ๋๊ณ ์ํด ์ฒซ ์ฃผ๋ก ๊ณ์ฐ์ ํด์ 201852๊ฐ ์๋ 201800์ ํค๊ฐ์ผ๋ก ๊ณ์ฐํ๊ณ ์์๋ ๊ฒ์ ๋๋ค.
๋ฒ์จ ์ถ์ํ ์ง 4์ฃผ๋ ์ด ์ง๋ ๊ฒ์์ด์๋๋ฐ, ๋งค๋ ์ฒซ ์ฃผ์ ๊ฐ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ธ๊ฐ? ํ๊ณ ๋ดค๋๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ๋งค๋ ์์ด์ ์ด์ํ์์ ๋ชจ๋ํฐ๋งํ๊ณ ์์๋ ๊ฒ์ด์์ต๋๋ค. ์ฅ์ ์์ธ์ ํ์ ํ์ง๋ ๋ชปํ๊ณ ์์ ๋ ๋ชปํ ์ฑ๋ก ๊ณ์ ์๋น์คํด ์๋ ๊ฒ์ด์ฃ .
์์ธ ํ์
์ฐ์ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ์ฝ๋๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
Calendar calendar = Calendar.getInstance();
calendar.set(2018, 11, 30); // 2018-12-30 ์์ 0๋ถํฐ ์์ํ๋ฏ๋ก 12์์ 11
int year = calendar.get(Calendar.YEAR); // ๋
int week = calendar.get(Calendar.DAY_OF_WEEK); // ์์ผ [1-7]
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR); // ์ฃผ ์ฐจ
if (week == 1) {
weekOfYear--; // ์์์ผ์ ๋ฆฌ์
์ด๋ฏ๋ก ์ผ์์ผ์ด๋ฉด weekOfYear ๊ฐ์ ํ๋ ๊ฐ์ ์ํด
}
String yearWeekParam = String.format("%d%02d", year, weekOfYear);
System.out.println(yearWeekParam); // 201800
๊ทธ ํด ๋ง์ง๋ง ์ฃผ๊ฐ ์ ํด์ ๊ฒน์ณ์์ ๋๋ ์ ํด ์ฒซ ์ฃผ์ ํธ์ ์ด ๋๋๋ฐ, ์ด ์ฝ๋์์๋ ๊ทธ ์ฐ๋๊ฐ ๋ฐ๋์์ ๋ ์ฒ๋ฆฌ๊ฐ ์๊ณ ์ํด ์ฒซ ์ฃผ๋ก ํ๋จํ์ฌ 1์ด ๋ weekOfYear ๊ฐ์ ๊ฐ์์์ผ ๋ฒ๋ ค์ ์ฒ๋ฆฌ๊ฐ ์๋ชป๋๊ณ ์์์ต๋๋ค.
- 2018๋ 12์ 29์ผ ํ ์์ผ(52์ฃผ ์ฐจ): 201852(์๋) -> 201852(์ผ์น)
- 2018๋ 12์ 30์ผ ์ผ์์ผ(52์ฃผ ์ฐจ): 201852(์๋) -> 201800(์ค๋ฅ)
๋ฌธ์ ์์
์ฝ๋๋ฅผ ๊ณ ์น๋ ๊ฒ์ ๊ฐ๋จํ์ต๋๋ค. ์ผ์ฃผ์ผ์ ์์์ ์์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋์ผ๋๊น์.
1
2
3
4
5
6
7
8
9
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY); // ์ผ์ฃผ์ผ์ ์์์ ์์์ผ๋ก ์ค์
calendar.set(2018, 11, 30);
int year = calendar.get(Calendar.YEAR);
// ... ์ญ์
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
// ... ์ญ์
String yearWeekParam = String.format("%d%02d", year, weekOfYear);
System.out.println(yearWeekParam); // 201852
์ด๊ฒ์ผ๋ก 2018๋ 12์ 30์ผ์ ๋ฐ์ํ ํด๋น ๋ฌธ์ ๋ ํด๊ฒฐ๋์ต๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ ์์ต๋๋ค.
- 2018๋ 12์ 31์ผ ์์์ผ(1์ฃผ ์ฐจ): 201901(์๋) -> 201801(์ค๋ฅ)
- 2019๋ 1์ 1์ผ ์ผ์์ผ(1์ฃผ ์ฐจ): 201901(์๋) -> 201901(์ผ์น)
2018๋ 12์ 31์ผ์ด ๋์์ ๋ ์ํด๊ฐ ๋์ด ์ฃผ ์ฐจ๊ฐ 1์ด ๋์์ง๋ง, ์ฐ๋๋ ๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ํค๊ฐ์ด 201801์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๋ฌธ์ ๋ ์๋ ์ฝ๋์ ๊ฐ์ด ์ฃผ ์ฐจ์ ์์ ๊ฒ์ฌํด์ ์ฐ๋๋ฅผ ์ฆ๊ฐ์์ผ ์ฃผ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(2018, 11, 31);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
if (weekOfYear == 1 && month != 0) { // ์ํด ์ฒซ ์ฃผ์ธ๋ฐ 1์์ด ์๋ ๊ฒฝ์ฐ ์ฐ๋ ๊ฐ์ ์ฆ๊ฐ
year++;
}
String yearWeekParam = String.format("%d%02d", year, weekOfYear);
System.out.println(yearWeekParam); // 201901
๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค
2018๋ 12์ 31์ผ์ด 201901์ด ๋๋ ๊ฒ์ด ๋ง์๊น์? 2018๋ ์ ๋ง์ง๋ง ์ฃผ ์ฐจ๋๊น 201853์ด ๋๋ ๊ฒ์ด ๋ง์๊น์?
์ค์ ๊ฐ๋ฐํ์์๋ ์๊ฒฌ ์ถฉ๋์ด ์ ๊น ๋ฐ์ํ์๋๋ฐ, ์ฌ์ฉ ์ค์ธ Calendar ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ํด ์ฒซ ์ฃผ๋ 1์ 1์ผ์ด ํฌํจ๋ ์ฃผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ณ์ฐ์ ํธ์์ฑ์ ๊ณ ๋ คํด์ ๊ทธํด ๋ง์ง๋ง ์ฃผ๋ ์ํด ์ฒซ ์ฃผ์ ํธ์ ๋๋ ๊ฒ์ผ๋ก ๊ฒฐ๋ก ์ด ๋ฌ์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง๋ค ๊ตฌํ์ด ๋ค๋ฅด๊ธด ํ๋๊ตฐ์. ๋์ค์ ์ฐพ์๋ณธ moment.js์์๋ 1์ 1์ผ์ด ์ง๋ํด ๋ง์ง๋ง ์ฃผ ์ฐจ์ ๊ฒน์น๋ ๊ฒฝ์ฐ ๋ง์ง๋ง ์ฃผ ์ฐจ์ ํธ์ ๋๊ณ ์ฒซ ์ฃผ ์ฐจ๊ฐ ๋ฐ๋ฆฌ๋๋ก ๊ตฌํ์ด ๋์ด์์์ต๋๋ค.
๊ฒฐ๋ก
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์๋ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ถฉ๋ถํ ํ์ ์ด ํ์ํ๋ค๋ ์ ๊ณผ ๋ค์ํ ํ ์คํธ ์ผ์ด์ค๊ฐ ํ์ํ๋ค๋ ์ ๊ผญ ๊ธฐ์ตํด์ผ๊ฒ ์ต๋๋ค.
์ ์ด์ ๊ธฐ์ค์ด ๋๋ ์ผ๋ก๋ถํฐ ์ฃผ ์ฐจ๋ฅผ ์นด์ดํธํ๋ ๋ฐฉ์์ด์๋ค๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ ์์์ ๊ฒ์ด๊ณ ๋ ๊ตฌํํ๊ธฐ ์ฝ๊ณ ์ข์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ ์ค์ ๋ก ์ด ๊ฒฝํ ๋๋ถ์ ์ดํ ์ด์ ๋น์ทํ ์ด๊ธฐํ ๋ฐฉ์์ ๊ตฌํํ ๋๋ ์๋น์ค ์์์ผ์ ๊ธฐ์ค์ผ๋ก ํค๊ฐ์ ์นด์ดํธํ๋ ๊ฒ์ผ๋ก ๊ตฌํํ๊ณ ์์ต๋๋ค.
๋ฒ์ธ
๊ธ์ ์์ฑํ๋ฉด์ ์ข ๋ ์กฐ์ฌํด ๋ณด๋ ISO์์ ํ์ค์ผ๋ก ์ง์ ํ ์ฃผ ์ฐจ ๊ณ์ฐ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค. ์์ธํ ๊ฒ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค. https://en.wikipedia.org/wiki/ISO_week_date#First_week