반응형
Calendar
- 추상클래스 ==> 직접 객체를 생성할 수 없고 메서드를 통해 인스턴스를 얻어야한다.
Calendar cal = new Calendar(); // 에러남.
Calendar cal = Calendar.getInstance(); //이렇게 쓰기!
사용법
사용전 import java.util.Calendar; 를 써줘야한다.
- . get()
Calendar에 정의된 static 상수들을 매개변수로 사용한다.
//기본적으로 현재 날짜와 시간으로 설정됨.
Calendar today = Calendar.getInstance(); //Calendar 클래스를 구현한 클래스의 인스턴스를 반환
today.get(Calendar.YEAR); // 연도 구하기. 상수라서 대문자 사용.
today.get(Calendar.MONTH); //월 구하기. *범위: 0~11
today.get(Calendar.WEEK_OF_YEAR); //이 해의 몇째 주
today.get(Calendar.WEEK_OF_MONTH); //이 달의 몇째 주
today.get(Calendar.DATE); //이 달의 몇 일
today.get(Calendar.DAY_OF_MONTH); //이 달의 몇 일
today.get(Calendar.DAY_OF_YEAR); //이 해의 몇 일
today.get(Calendar.DAY_OF_WEEK); //요일. 일요일:1 월요일:2 화요일:3 ...
today.get(Calendar.DAY_OF_WEEK_IN_MONTH); //이 달의 몇 째 요일
today.get(Calendar.AM_PM); //오전:0 오후:1
today.get(Calendar.HOUR); //시간(0~11)
today.get(Calendar.HOUR_OF_DAY); //시간(0~23)
today.get(Calendar.MINUTE); //분(0~59)
today.get(Calendar.SECOND); //초(0~59)
today.get(Calendar.MILLISECOND); //1000분의 1초(0~999)
//천분의 1초를 시간으로 표현(3600000으로 나누기)
today.get(Calendar.ZONE_OFFSET/60*60*1000); //TimeZone(-12~+12)
today.getActualMaximum(Calendar.DATE); //이 달의 마지막 날
//*getMaximum 은 Calendar 자체가 최대로 가질 수 있는 날을 나타냄.
- set메서드
- 날짜와 시간을 원하는 값으로 변경하고 싶을 때 사용한다.
날짜 설정하기.
import java.util.Calendar;
class Main {
public static void main(String[] args) {
final String[] DAY_OF_WEEK = {"", "일", "월", "화", "수", "목", "금", "토"}; //요일 배열 생성
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.set(2024, 2, 4); //2024년 3월 4일로 날짜 설정.
System.out.println("date1은 " + toString(date1) + DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)] + "요일입니다.");
//date1은 2024년 3월 4일 월요일입니다.
//두 날짜간의 차이 얻기(천분의 일초단위로 변환필요)
long difference = (date2.getTImeInMillis() - date1.getTimeInMillis())/1000;
//String으로 변환하기 위한 메서드
public static String toString(Calendar date){
return date.get(Calendar.YEAR) +"년 " + (date.get(Calendar.MONTH)+1) + "월 " + date.get(Calendar.DATE) +"일 ";
}
}
-시간 설정하기.
Calendar time = Calendar.getInstance();
//time을 10시 20분 30초로 설정
time.set(Calendar.HOUR_OF_DAY, 10);
time.set(Calendar.MINUTE, 20);
time.set(Calendar.SECOND, 30);
- .add(int field, int amonut);
- 지정한 필드의 값을 원하는 만큼 증가 또는 감소시킨다.
Calendar date = Calendar.getInstance();
date.set(2019, 7, 31); //2019년 8월 31일
date.add(Calendar.DATE, 1); //2019년 9월 1일
date.add(Calendar.MONTH, -6); //2019년 3월 1일
date.roll(Calendar.DATE, 31); //2019년 3월 1일
date.add(Calendar.DATE, 31); //2019년 4월 1일
* roll(int field, int amount) 도 지정한 필드의 값을 증가 또는 감소시키긴 하지만 다른 필드의 영향을 미치지 않는다.
add메서드는 date의 값을 증가시키다 다음달로 넘어가면 month의 값도 1일 증가하지만, roll메서드는 월 필드의 값이 변하지 않고 일 필드의 값만 바뀐다. 다만, 일 필드가 말일 일때 roll메서드를 통해 월 필드를 변경하면 일 필드에 영향을 준다.
*** 참조) Calendar 와 Date 간의 변환 ***
1. Calendar를 Date로 변환
//Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cla.getTimeInMillis()); //Date(ling date)
//Date를 Calendar로 변환.
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d)
참고자료) "자바의 정석 기초편"
반응형
'JAVA' 카테고리의 다른 글
[컬렉션 프레임웍] ArrayList와 LinkedList (0) | 2024.03.05 |
---|---|
[컬렉션 프레임웍] 컬렉션 프레임웍의 정의와 핵심 인터페이스 (0) | 2024.03.04 |