h-i-s-t-o-r-y

[Java] Date, Calendar 클래스 (java.util 패키지) 본문

Java

[Java] Date, Calendar 클래스 (java.util 패키지)

H' 2021. 7. 17. 23:59
package days23;

import java.util.Date;

public class Ex02 {

	public static void main(String[] args) {
		// Date 클래스 = 날짜 + 시간 다루는 클래스
		// ** java.util 패키지 주의 (java.sql.Date 아님X)
		Date d = new Date();
		//Wed Apr 07 10:41:53 KST 2021
		System.out.println(d); //toString() 생략됐다고 이해해도됨
		//System.out.println(d.toString());
		
		//년월일									//2021년 4월 7일
		System.out.println(d.getYear() + 1900);	//121+1900 = 2021
		System.out.println(d.getMonth() + 1);	//3+1 = 4
		System.out.println(d.getDate());		//7
		
		
		//시분초								//오전 10:48:08
		System.out.println(d.getHours());	//10
		System.out.println(d.getMinutes());	//48
		System.out.println(d.getSeconds());	//08
		
		//요일								//일(0)월(1)화(2)수(3)..
		System.out.println(d.getDay());		//3 수요일
		
		String s = getDate(d);
		System.out.println(s);
		
		
	}

	// 2021년 4월 7일 11:08:08 (수)
	private static String getDate(Date d) {
		return String.format("%d년 %d월 %d일 %02d:%02d:%02d (%c)"
				, 1900 + d.getYear()
				, d.getMonth() + 1
				, d.getDate()
				, d.getHours()
				, d.getMinutes()
				, d.getSeconds()
				, "일월화수목금토".charAt(d.getDay()));
	}

}
package days23;

import java.util.Date;

public class Ex03 {

	public static void main(String[] args) {
		// [문제1]
		Date d = new Date();
		
		/*
		// GMT = 그리니치 평균 시간 = 세계 표준 시간
		// 7 Apr 2021 02:10:27 GMT
		System.out.println(d.toGMTString());
		// Locale 지역
		// 2021. 4. 7 오전 11:10:27
		System.out.println(d.toLocaleString());
		*/
		
		
		/*
		// 지났는지 안지났는지 boolean 반환
		// d.after(when)	기준날짜 포함 이후
		// d.before(when)	기준날짜 포함 이전
		// d.equals(obj)	같은 날짜냐
		
		// since January 1, 1970, 00:00:00 GMT
		System.out.println(d.getTime());	// long 1617761584812(ms)
		
		// long Date 값 -> Date p 객체 생성
		// 2021. 4. 7 오전 11:13:04
		Date p = new Date(1617761584812L);	// L 안붙이면 기본 int 인식
		System.out.println(p.toLocaleString());
		*/
		
		
		// 만년달력
		// 1. 년 월 1일 > 무슨요일?
		// 2. 년 월 > 마지막 날짜 몇일?
		// 
		
		int year = 2020;
		int month = 3;
		
		// 1. 무슨요일? d.getDay()
//		Date d1 = new Date(year-1900, month-1, 1);
//		System.out.println(d1.getDay());
		
		
		// d 객체 생성후 값 설정
		d.setYear(year-1900);
		d.setMonth(month-1);
		d.setDate(1);
		d.setHours(0);
		d.setMinutes(0);
		d.setSeconds(0);
		//Sun Mar 01 00:00:00 KST 2020	-> 일요일
		System.out.println(d);
		
		
		// 2. 마지막 날짜 몇일?
		d.setMonth(month);	// 3-> 4월이 들어감
		d.setDate(0);	//날짜에 0을주니 이전달(3월)의 마지막 날짜를 리턴함
		System.out.println(d.getDate());
		
		
		
		
		
		// Date.from(instant)
		// Date.parse(s)
		
		// String -> Date 변환
		String s = "1 May 2010 02:07:31 GMT";
		long dateLong = Date.parse(s);	//1272679651000
		System.out.println(new Date(dateLong));
		
		
		
		
	}//main

}//class
package days23;

import java.util.Calendar;

public class Ex04 {

	public static void main(String[] args) {
		// p.530 [문제2]
		// JDK 1.1 Calendar 클래스 				추상클래스 이므로 객체 생성 X
		//Calendar c = new Calendar();				구현해야함!
		Calendar c = Calendar.getInstance(); 	// * getInstance() *
		
		//캘린더 객체 안에 상수값 쓰자고요~
//		int field = 1;	//처음엔 이렇게 했는데
//		System.out.println(Calendar.YEAR);	//1
		System.out.println(c.get(Calendar.YEAR));		//2021년
		
//		field = 2;
//		System.out.println(Calendar.MONTH);	//2
		System.out.println(c.get(Calendar.MONTH) + 1);	//4월
		
		System.out.println(c.get(Calendar.DATE));		//7일
		
		// [Date클래스에는 없던 기능]
		// 시간, [24시간], 분, 초, [밀리세컨드], 오전/오후			//오후 12:02:21
		System.out.println(c.get(Calendar.HOUR));			//0시
		System.out.println(c.get(Calendar.HOUR_OF_DAY));	//12시
		System.out.println(c.get(Calendar.MINUTE));			//2분
		System.out.println(c.get(Calendar.SECOND));			//21초
		System.out.println(c.get(Calendar.MILLISECOND));	//131ms
		System.out.println(c.get(Calendar.AM));				//1
		System.out.println(c.get(Calendar.AM_PM));			//1
		
		// Date : 일요일(0)~토(6)
		// ** Calendar : 일요일(1)~토(7)
		System.out.println(c.get(Calendar.DAY_OF_WEEK));	//4
		
		// [이 해의 몇째주]?
		System.out.println(c.get(Calendar.WEEK_OF_YEAR));	//올해 15주
		// [이 달의 몇째주]?
		System.out.println(c.get(Calendar.WEEK_OF_MONTH));	//이번달 2째주
		// [이 해의 몇째날]?
		System.out.println(c.get(Calendar.DAY_OF_YEAR));	//97일
		// [이 달의 몇째날]?
		System.out.println(c.get(Calendar.DAY_OF_MONTH));	//7일
		// [이 달의 몇째요일]?
		System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));	//1 첫번째수요일

		// 이 달의 마지막 날짜..
		System.out.println(c.getActualMaximum(Calendar.DATE));	//30
		
		
		
		
	}//main

}//class
package days23;

import java.util.Calendar;
import java.util.Date;

public class Ex05 {

	public static void main(String[] args) {
		// p.529 [문제3]
		// c.setTime / c.getTime / getTimeInMillis(L)
		Date d = new Date();
		Calendar c = Calendar.getInstance();
		
		// 1. Date -> Calendar 형변환
		Date date = d;
		c.setTime(date);
		
		// 2. Calendar -> Date 형변환
		long datelong = c.getTimeInMillis();
		Date d2 = new Date(datelong);
		// or..
		Date d3 = c.getTime();

	}

}

 

package days23;

import java.util.Calendar;

public class Ex06 {
	
	public final static String DAY_OF_WEEK = " 일월화수목금토";

	public static void main(String[] args) {
		// [문제4] 두 날짜 사이의 간격 : 일 시간 분 초 지났다/남았다
		// p.531 예제 10-2
		// p.532, 533
		// 1. 개강일 무슨요일 / 오늘 무슨요일 / 날짜정보출력
		// 2. 개강일로부터 오늘까지 ??초
		// 3.				일/시간/분/초 출력
		
		Calendar openingDay = Calendar.getInstance();
		openingDay.set(2021, 3-1, 8);
		
		Calendar today = Calendar.getInstance();
		
		System.out.printf("> 개강일 : %s\n", toString(openingDay));
		System.out.printf("> 오늘 : %s\n", toString(today));
		
		long diff = today.getTimeInMillis() - openingDay.getTimeInMillis();
		
		System.out.println(diff +" ms");
		
		System.out.println(diff/1000 +" s");
		
		System.out.println(diff/1000/60 +" m");
		System.out.println(diff/1000/60/60 +" h");
		System.out.println(diff/1000/60/60/24 +" d"); 
		
	}//main

	private static String toString(Calendar c) {
		return String.format("%d년 %d월 %d일(%c)"
				, c.get(Calendar.YEAR)
				, c.get(Calendar.MONTH)+1
				, c.get(Calendar.DATE)
				, DAY_OF_WEEK.charAt(c.get(Calendar.DAY_OF_WEEK)));
	}

}//class
package days23;

import java.util.Calendar;

public class Ex08 {

	public static void main(String[] args) {
		// p.535 [문제5]
		// arg로 입력받은 년도, 월의 달력 출력
		if( args.length != 2) {
			System.out.println("> 년도 월 입력하세요....");
			return;
		}
		
		int year = Integer.parseInt( args[0] );
		int month = Integer.parseInt( args[1] );

		System.out.printf("\t\t\t%d년 %d월\n", year, month);
		
		Calendar c = Calendar.getInstance();
		c.set(year, month - 1, 1);
		
		
		
		// 1일 무슨요일?	*주의* 1(일)~7(토)
		int FirstDayOfWeek = c.get(Calendar.DAY_OF_WEEK);
		//System.out.println(FirstDayOfWeek);	//5(목요일)
		c.add(Calendar.DATE, -FirstDayOfWeek + 1);
		// 1일에서 첫날가리키는 5를빼고 1더함 (5앞의 4칸을 채우려고)
		// -3  -2  -1  0  1(5번째)
		// 같은 주에 있는 저번달 날짜도 표시하려고 !
		
		
		
		// 7일 6주 나타내려고 42번
		for (int i = 0; i < 42; i++) {
			//System.out.println( c.getTime().toLocaleString() );
			System.out.printf("%2d(%d)\t", c.get(Calendar.DATE), c.get(Calendar.MONTH)+1);
			c.add(Calendar.DATE, 1);
			if(i%7==6) System.out.println();
		}
		
		
		//GregorianCalendar c2 = new GregorianCalendar();
		//c2.isLeapYear(year)
		
		//GregorianCalendar c2 = (GregorianCalendar) c;
		//c2.isLeapYear(year)		
		
		
		
		
		
		
		/* 예제
		int year = 2021;
		int month = 4;
		
		Calendar sDay = Calendar.getInstance();
		Calendar eDay = Calendar.getInstance();
		
		//첫날
		sDay.set(year, month-1, 1);
		//마지막날
		eDay.set(year, month, 1);
		eDay.add(Calendar.DATE, -1);
		
		//첫날 요일
		int FirstDayOfWeek = sDay.get(Calendar.DAY_OF_WEEK);
		//달의 마지막날 저장
		int END_DAY = eDay.get(Calendar.DATE);
		
		System.out.printf("      %d년 %d월\n", year, month);
		System.out.println("SU MO TU WE TH FR SA");
		for (int i = 1; i < FirstDayOfWeek; i++) {
			System.out.print("   ");
		}
		for (int i = 1; i <= END_DAY; i++) {
			System.out.printf(i<10? " %d ": "%d ",i);
			if (FirstDayOfWeek++ % 7 == 0) System.out.println();
		}
		*/
		
	}

}
Comments