java.util.Date
날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK 1.0 1995년 말부터 사용), 자바가 처음 만들어질때 만들어진 클래스로 급하게 만들어져 날짜와 시간을 다루는데 부족한 부분이 있어 Date의 메서드는 거의 deprecated(디프리케이티드, 앞으로 사용하지 말라는 뜻) 되었지만 여전히 쓰이고 있다.
java.util.Calendar
Date클래스를 개선한 새로운 클래스(JDK1.1 1997년 쯤). 여전히 단점이 존재
http://www.tcpschool.com/java/java_api_calendar
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
java.time패키지(자바의 정석 3판에 자세히 설명)
Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK 1.9 2014년)
Date와 Calendat은 항상 날짜와 시간을 같이 다루게 되있다는 문제가 있었고 문제를 개선해 Time패키지는 날짜와 시간을 다룰수 있게 LocalDate와 LocalTime, 함께 다룰때는 LocalDateTime을 사용할 수 있도록 세분화하여 제공한다.
Calendar클래스
- Calendar에 정의된 날짜 필드
필드명 | 설명 |
YEAR | 년 |
MONTH | 월(0부터 시작) |
WEEK_OF_YEAR | 그 해의 몇 번째 주 |
WEEK_OF_MONTH | 그 달의 몇 번째 주 |
DATE | 일 |
DAY_OF_MONTH | 그 달의 몇 번째일 |
DAY OF_YEAR | 그 해의 몇 번째일 |
DAY_OF_WEEK | 요일 |
DAY_OF_WEEK_IN_MONTH | 그 달의 몇 번째 요일 |
- Calendar에 정의된 시간 필드
필드명 | 설명 |
HOUR | 시간(0~11) |
HOUR_OF_DAY | 시간(0~23) |
MINUTE | 분 |
SECOND | 초 |
MILLISECOND | 천분의 일초 |
ZONE_OFFSET | GMT기준 시차(천분의 일초 단위) |
AM_PM | 오전/오후 |
- Calendar클래스는 추상 클래스로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = Calendar.getInstance(); // 추상적
Calendar cal = new GregorianCalendar(); // 구체적
getInstance() 메서드는 여러 종류의 달력 중 상황에 맞는 Calendar클래스를 구현한 클래스의 인스턴스를 반환한다. 메서드를 통해 객체를 반환하게 함으로써 사용하는 사용자가 다른 달력을 사용하여 할때 코드를 수정하지 않아도 되게 된다. 만약 구체적으로 사용할 클래스를 세분화 하여 작성헀다면 상황에 맞는 클래스를 사용하기 위해선 코드를 수정해야 한다. 이와같이 메소드를 통해 상황에 맞는 객체를 반환하도록 작성하는 것이 바람직하다.
- get()으로 날짜와 시간 필드 가져오기
int get(int field) | 전달된 Calendar 필드에 저장된 값을 반환한다. |
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // Sun Oct 01 17:13:13 KST 2023
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 1
System.out.println(cal.get(Calendar.MONTH) + 1); // 10
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); // 1
System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 17
System.out.println(cal.get(Calendar.MINUTE)); // 13
System.out.println(cal.get(Calendar.SECOND)); // 13
System.out.println(cal.get(Calendar.YEAR)); // 2023
- 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) |
전달된 Calendar필드를 특정 값으로 설정한다. |
날짜 지정 방법
cal.set(2024, 9, 26); // (int year, int month, int date)
cal.set(Calendar.YEAR, 2024); //(int field, int value)
cal.set(Calendar.MONTH, 9); // MONTH는 배열로 0부터 시작되에 실제로는 10월달을 의미
cal.set(Calendar.DATE, 26);
시간 지정 방법
cal.set(Calendar.HOUR, 9); // 시간만을 변경하는 방법은 없어 하나하나 변경
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 30);
- clear()은 Calendar 객체의 필드를 초기화
void clear() void clear(int field) |
현재 Calendar 인스턴스의 필드의 값을 undefined로 설정한다. |
모든 필드를 초기화
cal.clear(); // 모든 필드를 초기화(EPOCH TIME)
System.out.println(cal.getTime)
// Thu Jan 01 00:00:00 KST 1970
특정 필드를 초기화
cal.clear(Calendar.YEAR); // 특정 필드를 초기화
System.out.println(cal.getTime());
// Thu Oct 01 17:52:05 KST 1970
현재 시간을 사용할 것이 아니라면 반드시 claer를 통해 객체의 필드를 초기화 해야 한다.
- add()는 특정 필드의 값을 증가 또는 감소시킨다.
void add(int field, int amount) | 전달된 calendar 필드에서 특정 시간 만큼을 더하거나 뺀다. |
add() 다른 필드에 영향을 준다.
Calendar cal = Calendar.getInstance();
cal.clear();
System.out.println(cal.get(Calendar.DATE)); // 1
cal.add(Calendar.HOUR_OF_DAY, 24); // 시간에 24를 더한다.
System.out.println(cal.get(Calendar.DATE)); // 2
cal.add(Calendar.HOUR_OF_DAY, -24); // 시간에 24를 뺀다.
System.out.println(cal.get(Calendar.DATE)); // 1
다른 필드에 영향을 주기 때문에 시간을 24 더한다면 일수가 증가하고 뺀다면 감소한다.
- roll()은 특정 필드의 값을 증가 또는 감소시킨다.
add와는 다르게 다른 필드에 영향을 주지 않는다.
Calendar cal = Calendar.getInstance();
cal.clear();
System.out.println(cal.get(Calendar.DATE)); // 1
cal.roll(Calendar.HOUR_OF_DAY, 24); // 시간에 24를 더한다.
System.out.println(cal.get(Calendar.DATE)); // 1
cal.roll(Calendar.HOUR_OF_DAY, -24); // 시간에 24를 뺀다.
System.out.println(cal.get(Calendar.DATE)); // 1
다른 필드에 영향을 주지않기 때문에 시간을 더하거나 빼도 일수의 감소는 없다.
Date와 Calendar간의 변환
Date는 deprecated되었지만 여전히 사용되기 때문에 변환하는 방법에 대해 알아두는 것이 좋다.
// Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());
// Date를 Calendar로 변환
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
'Java' 카테고리의 다른 글
[JAVA] 형식화 클래스 (0) | 2023.11.04 |
---|---|
[JAVA] 유용한 클래스(Math클래스, 래퍼클래스, Number클래스) (0) | 2023.11.04 |
[JAVA] 래퍼(Wrapper)클래스와 박싱 & 언박싱 (Boxing & UnBoxing) (0) | 2023.11.02 |
[JAVA] StringBuffer 클래스 (0) | 2023.11.02 |
[JAVA] String 클래스 (0) | 2023.10.31 |