[JAVA] Java๋ก ๊ฐ๋จํ ๋ฌ๋ ฅ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (Calendar ํด๋์ค ํ์ฉ)
Java์ Calendar ํด๋์ค๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ ๋ฌ๋ ฅ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ๋ค
ํด๋น ์ ๋ฌ๋ ฅ ์ถ๋ ฅ
2024 10
๋ ๊ณผ ์์ ์ ๋ ฅํ๋ฉด ํด๋น ์์ ์ถ๋ ฅํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
package chapter10;
import java.util.Calendar;
public class CalendarEx6 {
public static void main(String args[]) {
if (args.length != 2) {
return;
}
int year = Integer.parseInt(args[0]);
int month = Integer.parseInt(args[1]);
int START_DAY_OF_WEEK = 0;
int END_DAY = 0;
Calendar sDay = Calendar.getInstance();
Calendar eDay = Calendar.getInstance();
sDay.set(year, month - 1, 1);
eDay.set(year, month, 1);
eDay.add(Calendar.DATE, -1);
START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK);
END_DAY = eDay.get(Calendar.DATE);
System.out.println(" " + args[0] + "Y " + args[1] + "M");
System.out.println(" SU MO TU WE TH FR SA");
for (int i = 0; i < START_DAY_OF_WEEK; i++) {
System.out.print(" ");
}
for (int i = 1, n = START_DAY_OF_WEEK; i <= END_DAY; i++, n++) {
System.out.print((i < 10) ? " " + i : " " + i);
if (n % 7 == 0) {
System.out.println();
}
}
}
}
์์ธ
Calendar sDay = Calendar.getInstance();
Calendar eDay = Calendar.getInstance();
Calendar.getInstance()๋ ์์คํ ์ ํ์ฌ ๋ ์ง์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก Calendar ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
sDay๋ ํด๋น ๋ฌ์ ์ฒซ ๋ฒ์งธ ๋ ์ง๋ฅผ ๋ํ๋ด๊ณ , eDay๋ ํด๋น ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ํ๋ธ๋ค.
sDay.set(year, month - 1, 1);
eDay.set(year, month, 1);
eDay.add(Calendar.DATE, -1);
sDay.set(year, month - 1, 1);๋ ์ฃผ์ด์ง ๋ ๋์ ์์ ์ฒซ ๋ฒ์งธ ๋ ์ ์ค์ ํ๋ค. ์์ 0๋ถํฐ ์์ํ๋ฏ๋ก, ์ค์ ๋ก ์ ๋ฌ๋ ์์์ 1์ ๋นผ์ผ ํ๋ค.
2024๋ 10์์ ์๊ณ ์ถ๋ค๋ฉด sDay.set(2024, 9, 1)๋ก ํด์ผํ๊ณ , 2024๋ 10์ 1์ผ๋ก ์ค์ ๋๋ ๊ฒ์ด๋ค.
eDay.set(year, month, 1);๋ ํด๋น ์์ ์ฒซ ๋ฒ์งธ ๋ ์ ์ค์ ํ๊ณ , ๊ทธ ๋ค์๋ ๋ก ์ด๋์์ผ ๋ง์ง๋ง ๋ ์ ๊ณ์ฐํ๋ค.
eDay.set(2024, 10, 1) 2024๋ 11์ 1์ผ๋ก ์ค์ ๋๋ ๊ฒ
eDay.add(Calendar.DATE, -1);๋ eDay๋ฅผ ํ ๋ฌ ๋ค๋ก ์ด๋์ํจ ํ, ํ๋ฃจ๋ฅผ ๋นผ์ ํด๋น ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ์ป๋๋ค.
eDay์ 1์ผ์ ๋นผ๋ ์ฝ๋์ด๋ค
์ฆ, 2024๋ 11์ 1์ผ์์ 1์ ๋นผ๋ฉด 2024๋ 10์ 31์ผ์ด ๋๋ค
๊ทธ๋์ eDay๋ 2024๋ 10์ 31์ผ๋ก ์ค์ ๋๋ ๊ฒ์ด๋ค.
START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK);
END_DAY = eDay.get(Calendar.DATE);
sDay.get(Calendar.DAY_OF_WEEK)๋ ํด๋น ๋ฌ์ ์ฒซ ๋ฒ์งธ ๋ ์ด ์ฃผ์ ๋ช ๋ฒ์งธ ๋ ์ธ์ง๋ฅผ ๋ฐํํ๋ค
์๋ฅผ ๋ค์ด, ์ผ์์ผ์ด๋ฉด 1, ์์์ผ์ด๋ฉด 2์ ๊ฐ์ด ๋ฐํ๋๋ค.
eDay.get(Calendar.DATE)๋ ํด๋น ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ฐํํ๋ค.
ํด๋น ๋ฌ์ ํฌํจํ ์ฃผ ๋จ์ ๋ฌ๋ ฅ ์ถ๋ ฅ
2024 11
๋ ๊ณผ ์์ ์ ๋ ฅํ๋ฉด ํด๋น ์๋ฟ๋ง ์๋๋ผ ํ ์ฃผ๋ฅผ ๊ฝ ์ฑ์ด ์บ๋ฆฐ๋๋ฅผ ๋ณด์ฌ์ค๋ค.
package chapter10;
import java.util.Calendar;
public class CalendarEx7 {
public static void main(String[] args) {
if (args.length != 2) {
return;
}
int year = Integer.parseInt(args[0]);
int month = Integer.parseInt(args[1]);
Calendar sDay = Calendar.getInstance();
Calendar eDay = Calendar.getInstance();
sDay.set(year, month - 1, 1);
// eDay.set(year, month, 1);
eDay.set(year, month - 1, sDay.getActualMaximum(Calendar.DATE));
sDay.add(Calendar.DATE, -sDay.get(Calendar.DAY_OF_WEEK) + 1);
eDay.add(Calendar.DATE, 7 - eDay.get(Calendar.DAY_OF_WEEK));
System.out.println(" " + args[0] + "Y " + args[1] + "M");
System.out.println(" SU MO TU WE TH FR SA");
for (int n = 1; sDay.before(eDay) || sDay.equals(eDay); sDay.add(Calendar.DATE, 1)) {
int day = sDay.get(Calendar.DATE);
System.out.print((day < 10) ? " " + day : " " + day);
if (n++ % 7 == 0) {
System.out.println();
}
}
}
}
์์ธ
Calendar sDay = Calendar.getInstance();
Calendar eDay = Calendar.getInstance();
sDay.set(year, month - 1, 1);
eDay.set(year, month - 1, sDay.getActualMaximum(Calendar.DATE));
Calendar.getInstance()๋ฅผ ์ฌ์ฉํ์ฌ sDay์ eDay๋ผ๋ ๋ ๊ฐ์ Calendar ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- sDay: ์์ ๋ ์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
- eDay: ๋ ๋ ์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด.
sDay.set(year, month - 1, 1);๋ ํด๋น ์์ ์ฒซ ๋ฒ์งธ ๋ ์ง๋ฅผ ์ค์ ํ๋ค.
month - 1์ ์์ด 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ 1์์ 0์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
2024๋ 11์์ด ์๊ณ ์ถ๋ค๋ฉด sDay.set(2024, 10, 1)๋ก ์ค์ ํด์ผ ํ๋ค
eDay.set(year, month - 1, sDay.getActualMaximum(Calendar.DATE));๋ ํด๋น ์์ ๋ง์ง๋ง ๋ ์ ์ค์ ํ๋ค. getActualMaximum(Calendar.DATE)๋ ํด๋น ์์์ ์ต๋ ๋ ์ง, ์ฆ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ฐํํ๋ค.
์์ eDay.set(year, month, 1) eDay.add(Calendar.DATE, -1)๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค
sDay.add(Calendar.DATE, -sDay.get(Calendar.DAY_OF_WEEK) + 1);
sDay.get(Calendar.DAY_OF_WEEK)๋ ์ฒซ ๋ฒ์งธ ๋ (์: 2024๋ 11์ 1์ผ)์ด ์ด๋ค ์์ผ์ธ์ง ๋ฐํํ๋ค.
์ด ๊ฐ์ 1๋ถํฐ 7๊น์ง์ ๊ฐ์ผ๋ก, ์ผ์์ผ์ 1, ์์์ผ์ 2์ ๊ฐ์ ๋ฐฉ์์ด๋ค.
sDay.add(Calendar.DATE, -sDay.get(Calendar.DAY_OF_WEEK) + 1);๋ ์์ ๋ ์ง๋ฅผ ํด๋น ์ฃผ์ ์ผ์์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ฒซ ๋ฒ์งธ ๋ ์ด ํ์์ผ์ด๋ผ๋ฉด, ๋ ๋ฒ์งธ ๋ ๋ถํฐ ์ผ์์ผ๊น์ง์ ๋ ์ง๋ฅผ ์ด๋์ํจ๋ค.
โ -sDay.get(Calendar.DAY_OF_WEEK) + 1 (ํ์ฌ ๋ ์ง๊ฐ ์ํ ์ฃผ์ ์ผ์์ผ ๋ ์ง๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ)
์๋ฅผ ๋ค์ด ํ์์ผ์ 3์ด๋ผ๋ฉด -3 + 1 = -2๊ฐ ๋๋ค
ํ์์ผ์์ ๋ ๋ ์ ๋นผ๋ฉด ์ผ์์ผ์ธ๋ฐ, ์ผ์์ผ์ ํด๋นํ๋ ๋ ์ง๋ก ์ด๋ํ๋ ๋ฐฉ์์ด๋ค
eDay.add(Calendar.DATE, 7 - eDay.get(Calendar.DAY_OF_WEEK));
eDay.get(Calendar.DAY_OF_WEEK)๋ ๋ง์ง๋ง ๋ ์ง(์: 2024๋ 10์ 31์ผ)๊ฐ ์ด๋ค ์์ผ์ธ์ง๋ฅผ ๋ฐํํฉ๋๋ค
eDay.add(Calendar.DATE, 7 - eDay.get(Calendar.DAY_OF_WEEK));๋ ๋ง์ง๋ง ๋ ์ง๋ฅผ ํด๋น ์ฃผ์ ํ ์์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ๋๋ค.
โ 7 - eDay.get(Calendar.DAY_OF_WEEK)); ( ํ์ฌ ๋ ์ง๊ฐ ์ํ ์ฃผ์ ํ ์์ผ ๋ ์ง๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ)
์๋ฅผ ๋ค์ด eDay.get(Calendar.DAY_OF_WEEK๊ฐ ์์์ผ์ด๋ผ๋ฉด, 7 - 4 = 3
3์ผ ํ์ ์ ๋ณด๊น์ง ๊ฐ์ ธ์ addํ๋ ๊ฒ์ด๋ค (ํ ์์ผ๊น์ง)
for (int n = 1; sDay.before(eDay) || sDay.equals(eDay); sDay.add(Calendar.DATE, 1)) {
int day = sDay.get(Calendar.DATE);
System.out.print((day < 10) ? " " + day : " " + day);
if (n++ % 7 == 0) {
System.out.println();
}
}
sDay.before(eDay) || sDay.equals(eDay)
sDay๊ฐ eDay๋ณด๋ค ์์๊ฑฐ๋ ๊ฐ์ ๋ ์ง์ผ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ฆ, ์์ ๋ ์ง๋ถํฐ ๋ง์ง๋ง ๋ ์ง๊น์ง ๋ฐ๋ณตํ๋ค.
sDay.add(Calendar.DATE, 1) : sDay๋ ์ง๋ฅผ ํ๋ฃจ ๋ํ๋ ์์ ์ด๋ค.