get 메서드의 매개변수로 사용되는 int 값들은 Calendar에 정의된 static 상수다.
주요 상수
상수
설명
YEAR
현재 년도
MONTH
현재 월 (0~11. 0:1월)
WEEK_OF_YEAR
현재 년도의 몇 째 주
WEEK_OF_MONTH
현재 월의 몇 째 주
DATE
현재 월의 날짜
DAY_OF_MONTH
현재 월의 날짜
DAY_OF_YEAR
현재 년도
DAY_OF_WEEK
현재 요일 (1~7. 1:일요일)
DAY_OF_WEEK_IN_MONTH
현재 월의 몇 째 요일
AM_PM
현재 시간 (오전 0, 오후 1)
HOUR
현재 시간 (0~11)
HOUR_OF_DAY
현재 시간 (0~23)
MINUTE
현재 분(0~59)
SECOND
현재 초(0~590
MILLISECOND
1000분의 1초(0~999)
ZONE_OFFSET
TimeZone(-12~+12
get(Calendar.Month)로 얻을 수 있는 값의 범위는 0~11이다. ex) 1월 → 0월
intyear,month,day;// 2017년 5월 30일Calendarcal=Calendar.getInstance();year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH);day=cal.get(Calendar.DAY_OF_MONTH);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2017년 4월 30일
cal.set(Calendar.DATE,2);day=cal.get(Calendar.DAY_OF_MONTH);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2017년 4월 2일cal.set(2017,12,25);year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH);day=cal.get(Calendar.DAY_OF_MONTH);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2018년 1월 25일 (?)
finalint[]UNIT={3600,60,1};finalString[]NAME={"시 ","분 ","초"};Stringtemp="";for(inti=0;i<UNIT.length;i++){temp+=(dif/UNIT[i])+NAME[i];dif%=UNIT[i];}Log.d("TAG_TEST",temp);// 10시 9분 30초
시간상의 전후를 알고 싶을 때는 두 날짜간의 차이가 양수인지 음수인지 판단하면 된다.
boolean after(Object when) : when과 비교하여 현재 날짜 이후이면 true, 아니면 false
boolean before(Object when) : when과 비교하여 현재 날짜 이전이면 true, 아니면 false
void add(int field, int amount)
지정한 필드의 값을 원하는 만큼 증가/감소 시킨다.
특정 날짜/시간을 기점으로 해서 일정 기간 전후의 날짜와 시간을 알아낼 수 있다.
intyear,month,day;Calendarcal=Calendar.getInstance();// 2017년 5월 30일cal.add(Calendar.DAY_OF_MONTH,5);year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH)+1;day=cal.get(Calendar.DATE);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2017년 6월 4일
void roll(int field, int amount)
지정한 필드의 값을 원하는 만큼 증가/감소 시킨다.
다른 필드에 영향을 미치지 않는다.
intyear,month,day;Calendarcal=Calendar.getInstance();// 2017년 5월 30일cal.add(Calendar.DAY_OF_MONTH,5);year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH)+1;day=cal.get(Calendar.DATE);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2017년 5월 4일
단, 일 필드가 말일(end of month)일 때 월 필드를 변경하면 일 필드에 영향을 미칠 수 있다.
intyear,month,day;Calendarcal=Calendar.getInstance();cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DATE));// 2017년 5월 31일cal.add(Calendar.MONTH,4);year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH)+1;day=cal.get(Calendar.DATE);Log.d("TAG_TEST",year+"년 "+month+"월 "+day+"일");// 2017년 9월 30일
int getActualMaximum(int field) : 해당 월의 마지막 날을 반환한다.
int getActualMinimum(int field) : 해당 월의 첫 날을 반환한다.
쓰레드에 안전하지 않다.
멀티 쓰레드 환경에서는 동시에 여러 쓰레드가 같은 객체에 접근할 수 있기 때문에,
변경 가능한 객체는 데이터가 잘못될 가능성이 있다.
날짜나 시간을 변경하는 메서드들이 기존의 객체를 변경할 수 있어서 멀티 쓰레드 환경에서 안전하지 못하다.