Calendar set, clear, add, roll

0

set()으로 날짜와 시간 지정하기

void set(int field, int value)
void set(int year, int month, int date) // 년,월,일
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)

1) 날짜 지정하는 방법

: 월(Month)이 0부터 시작한다는 점에 주의!

Calendar date1 = Calendar date1 = Calendar.getInstance();
date1.set(2017, 7, 15); // 2017년 8월 15일 (7월 아님)
// date1.set(Calendar.YEAR, 2017);
// date1.set(Calendar.MONTH, 7);
// date1.set(Calendar.DATE, 15);

2) 시간 지정 방법

: 년월일은 한 번에 셋팅할수있는데 시분초는 못함. 따로 해줘야 함.

Calendar time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10);  // time1을 10시 20분 30초로 설정
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);

clear()는 Calendar객체의 모든 필드를 초기화

Calendar dt = Calendar.getInstance(); // 현재 시간
System.out.println(new Date(dt.getTimeInMillis())); // Tue Aug 29 07:13:03 KST 2017
dt.clear(); // 모든 필드를 초기화
System.out.println(new Date(dt.getTimeInMillis())); // Thu Jan 01 00:00:00 KST 1970

↳ 1970년 1월 1일 00:00:00 : EPOCH Time. 시작 날짜를 이때 기준으로 잡자고 약속.

  • clear(int field)는 Calendar 객체의 특정 필드를 초기화
dt.clear(Calendar.SECOND);  // 초를 초기화
dt.clear(Calendar.MINUTE);  // 분 초기화
dt.clear(Calendar.HOUR_OF_DAY);  // 시간 초기화
dt.clear(Calendar.HOUR);  // 시간 초기화
  • 현재시간을 계산에 이용할 것이 아니라면, 시간 객체를 생성한 후에 꼭 clear를 하고 set()메소드를 사용해줘야 깔끔함.
    ↳ getInstance() 메소드는 약간의 ms차이가 나기 때문에 현재시간을 계산할 것이 아니고 특정 년월일,시분초를 사용할 것이라면 초기화 하고 set으로 설정해서 계산해야 정확한 수가 나옴.

add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향O)

Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드를 초기화
date.set(2020, 7, 31); // 2020년 '8월' 31일로 설정
date.add(Calendar.DATE, 1); // 날짜(DATE)에 1을 더한다. (9월 1일)
date.add(Calendar.MONTH, -8); // 월(MONTH)에서 8을 뺀다. (1월 1일)

roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향X)

date.set(2020, 7, 31); // 2020년 '8월' 31일로 설정
// add()와 달리 roll()은 다른 필드에 영향을 미치지 않는다.
date.add(Calendar.DATE, 1); // 날짜(DATE)에 1을 더한다. (8월 1일)
date.add(Calendar.MONTH, -8); // 월(MONTH)에서 8을 뺀다. (2020년 12월 31일) 

Date와 Calendar 간의 변환

  • Date의 메소드는 대부분 deprecated(사용하지 않을 것을 권장)되었지만 여전히 사용.
1. CalendarDate로 변환
	Calendar cal = Calendar.getInstance();
    Date d = new Date(cal.getTimeInMillis()); // Date(long date)
2. DateCalendar로 변환
	Date d = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);

↳ 외우진 않아도 됨!

출처

  • 자바의 정석 기초편 : ch 10- 4,5 / 10- 6~8
profile
백엔드를 공부하고 있습니다.

0개의 댓글