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]);