본문 바로가기

자바의 정석 정리

자바의 정석 - 10.1 날짜와 시간

10.1.1 Calendar

  • 추상클래스(직접 인스턴스 생성 불가)
  • getInstance()로 인스턴스 반환 가능
//국가와 지역설정
Calendar cal1 = Calendar.getInstance();

//Error!
Calendar cal2 = new Calendar();

/*
getInstance()가 static인 이유는, 인스터스 변수를 사용하거나 
인스턴스 메서드르 호출하지 않기 때문이다.
*/

10.1.2 Date와 Calendar간의 변환

  • Date는 JDK 1.0부터 사용할 수 있지만 대부분 'deprecated'가 됨
1. Calendar -> Date
Calendar  cal = Calendar.getInstance();
Date d = new Date(cal.getTimeMillis());

2. Date -> Calendar
Date d = new Date();
Calendar cal = Calender.getInstance();
cal.setTime(d);

10.1.3 Calendar.get()

Calendar c = Calendar.getInstance();

c.get(Calendar.DATE); //이달의 몇 일
c.get(Calendar.DAY_OF_WEEK) //1:일요일 ~ 7:토요일
c.getActualMaximum(Calendar.DATE) //이달의 마지막날
c.get(Canlendar.MONTH) //0(1월) ~ 11(12월)

10.1.3 .add(), .roll()

  • .add는 다른 필드에 영향을 미침(값 변동O)
  • roll은 다른 필드에 영향을 미치치 않음(값 변동X)
Calendar d = Calendar.getInstance();
//월 단위는 -1
d.set(2015,7,31); //2015년 8월 31일

d.add(Calendar.DATE, 1); //2015년 9월 1일
d.add(Calendar.MONTH, -6); //2015년 3월 1일
d.roll(Calendar.DATE, 31); //2015년 4월 1일
d.add(Calendar.DATE, 31); //2015년 4월 1일
d.add(Calendar.DATE, -1); //2015년 3월 31일

d.set(2015, 0 ,31) //2015년 1월 31일
d.roll(Calendar.MONTH, 1); //2015년 2월 28일

/*
2월은 28까지만 존재하여 28일 이후면 자동으로 28일로 변환됨(윤달 제외)
*/

10.1.4 substring을 통한 기간 계산

String d1 = "201508";
String d2 = "201405";

int mon1 = Integer.parseInt(d1.substring(0,4)) * 12 +
                    Integer.parsInt(d1.substring(4));

int mon2 = Integer.parseInt(d1.substring(0,4)) * 12 +
                    Integer.parsInt(d1.substring(4));

mon1 - mon2 //15