Backend/JAVA_Basic

18. JAVA, 날짜 관련 클래스(GregorianCalendar, Calendar, Date, SimpleDateFormat) & 연습문제

개발개발빈이 2022. 6. 3. 19:43

○ 날짜 관련 클래스

    - GregorianCalendar, Calendar, Date

    - java.util에 있는 클래스들임

GregorianCalendar now=new GregorianCalendar();

System.out.println(now.get(Calendar.YEAR));    //현재 년도
System.out.println(now.get(Calendar.MONTH));   //현재 월 (현재월-1로 출력)
System.out.println(now.get(Calendar.DATE));    //현재 일

System.out.println(now.get(Calendar.HOUR));    //현재 시 (12시간제)
System.out.println(now.get(Calendar.MINUTE));  //현재 분
System.out.println(now.get(Calendar.SECOND));  //현재 초

System.out.println(now.get(Calendar.HOUR_OF_DAY)); //현재 시 (24시간제)	 

System.out.println(now.get(Calendar.DAY_OF_WEEK)); //현재 요일
                                                   //(1일 2월 3화 4수 5목 6금 7토)

 

 날짜 데이터 연산

//now날짜에 3년 더하기
now.add(Calendar.YEAR, 3);
System.out.println(now.get(Calendar.YEAR));

//now날짜에 5달 빼기
now.add(Calendar.MONTH, -5);
System.out.println(now.get(Calendar.MONTH));

//now날짜에 7일 더하기
now.add(Calendar.DATE, 7);
System.out.println(now.get(Calendar.DATE));

 

 날짜 데이터 구성하기

    - set() 메소드 이용

    - 월을 설정할 때 숫자형으로 입력하면 -1을 해줘야 함

      따라서 헷갈릴 수 있으므로 'Calendar.영어달'로 입력하는 것이 좋음

GregorianCalendar myBirth=new GregorianCalendar();
myBirth.set(Calendar.YEAR, 1999);
myBirth.set(Calendar.MONTH, Calendar.MAY);
myBirth.set(Calendar.DATE, 30);

 

 날짜 데이터 String으로 변환

    - Date : 현재 날짜 데이터를 반환

    - SimpleDateFormat : 날짜 데이터를 원하는 형태로 가공

    - format(Date date) : Date를 String으로 변환

Date now = new Date();
System.out.println(now);//Fri Jun 17 22:51:40 KST 2022

SimpleDateFormat dateFrm = new SimpleDateFormat("yyyyMMdd");
String dateToStr = dateFrm.format(now);
System.out.println(dateToStr);//20220617

 

SimpleDateFormat 

    - yyyy : 년도

    - MM : 월

    - dd : 일

    - HH / hh : 시 (24시간제/12시간제)

    - mm : 분

    - ss : 초

Date today = new Date();

SimpleDateFormat dateFrm1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateFrm2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String dateToStr1 = dateFrm1.format(today);
String dateToStr2 = dateFrm2.format(today);

System.out.println(dateToStr1); //2022-06-17
System.out.println(dateToStr2); //2022-06-17 22:51:40

 

● Practice 연습문제

    - 주민등록번호 유효성 검사

    - Test06_jumin 클래스 생성

public class Test06_jumin {

	public static void main(String[] args) {
		
		Jumin id = new Jumin("8912301234567");
		
		if(id.validate()) {
			System.out.println("주민등록번호가 맞다");
			id.disp();
		}else {
			System.out.println("주민등록번호가 아니다");
		}
	
	}//main() end
    
}//class end

 

    - Jumin 클래스 생성

package oop0408;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Jumin {

	//멤버변수 field
	private String juminno; //주민번호
	
	//생성자함수 constructor
	public Jumin() {}
	
	public Jumin(String juminno) {
		this.juminno=juminno;
	}
	
	
	//멤버함수 method
	public boolean validate() {
		
        boolean flag=false;
        
		//Q1) 코드 작성 영역
        
        return flag;
	
	}//validate() end
	
	
	public void disp() {
	
		//Q2) 코드 작성영역
		
	}//disp() end


}//class end

 

        Q1) 주민번호가 맞으면 flag변수값에 true를 대입하시오

//Q1
int[] check = new int[13];

int size=check.length;

for (int i=0; i<size; i++) {
    check[i] = Integer.parseInt(juminno.substring(i, i+1));	
}

int A=check[0]*2;
int B=check[1]*3;
int C=check[2]*4;
int D=check[3]*5;
int E=check[4]*6;
int F=check[5]*7;
int G=check[6]*8;
int H=check[7]*9;
int I=check[8]*2;
int J=check[9]*3;
int K=check[10]*4;
int L=check[11]*5;

int m=check[12];	//유효성 검사코드

int M=(11-((A+B+C+D+E+F+G+H+I+J+K+L)%11))%10;	//유효성 검사식

if(M==m) {
    flag=true;
}


//강사님 코드/////////////////////////////////////////////////////////////////////////////
    Integer[] checknum = {2,3,4,5,6,7,8,9,2,3,4,5}; //주민등록번호 각자리에 곱해줘야 하는 수
    Integer[] save=new Integer[12]; //A~L까지 계산결과 저장 

    int hap=0;
    int svsize=save.length;
    for(int i=0; i<svsize; i++) {
        int num=Integer.parseInt(juminno.substring(i, i+1));
        save[i]=num*checknum[i];
        hap=hap+save[i];
    }//for end
    
    int vcode=(11-(hap%11))%10;
			
    if(vcode==Integer.parseInt(juminno.substring(12))) {//주민번호 마지막 글자와 같은지?
        flag=true;
    }//if end

 

        Q2) 생년월일, 성별, 나이, 띠 출력하기

int myCode=Integer.parseInt(juminno.substring(6, 7));
int myYear=0, myMonth=0, myDate=0;

myYear=Integer.parseInt(juminno.substring(0, 2));	//89
myMonth=Integer.parseInt(juminno.substring(2, 4));	//12
myDate=Integer.parseInt(juminno.substring(4, 6));	//30

switch(myCode) {
case 1 : 
case 2 : myYear=1900+myYear; break;
case 3 : 
case 4 : myYear=2000+myYear; break;
}

GregorianCalendar now=new GregorianCalendar();
int cYear=now.get(Calendar.YEAR);//2022

int myAge=cYear-myYear;

String gen="";
switch(myCode%2) {
case 0 : gen="여자"; break;
case 1 : gen="남자"; break;
}

String[] animal = {"원숭이", "닭", "개", "돼지", "쥐", "소", "호랑이", "토끼", "용", "뱀", "말", "양"};

System.out.println("주민번호: " + juminno);
System.out.println("생년월일 : " + myYear + "년 " + myMonth + "월 " + myDate + "일");
System.out.println("나이: " + myAge);
System.out.println("성별: " + gen);
System.out.println("띠: " + animal[myYear%12]);