๐™น๐šŠ๐šŸ๐šŠ

[JAVA] Java๋กœ ๊ฐ„๋‹จํ•œ ๋‹ฌ๋ ฅ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ (Calendar ํด๋ž˜์Šค ํ™œ์šฉ)

ํ•ด๋ฒ„๋‹ˆ 2024. 11. 9. 18:04
๋ฐ˜์‘ํ˜•

 

 

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๋‚ ์งœ๋ฅผ ํ•˜๋ฃจ ๋”ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

 

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•