시간, 날짜 등의 데이터를 얻기 위해 크게 date, calendar, time 세가지로 나뉠 수 있습니다.
하지만 가장 많이 쓰이는 것은 time 패키지로 가장 직관적이고 명확한 데이터를 가져올 수 있습니다.
어떤 이유에서 date, calendar 클래스가 계속 사용되기 어려웠는지를 알아보며 time 패키지에 대해서 자세히 알아보겠습니다.
최초로 날짜와 시간을 구하기 위한 클래스 Date 클래스
(하지만 Calendar 클래스가 새로 추가 되면서 Date 메소드는 deprecated-사용되지 않는 되어 잘 사용하지 않음)
Date 는 지역화가 이루어져있지 않음
Date는 지역화에 대한 부분이 고려되지 않았다.
java.util.SimpleDateFormat 클래스를 이용해서 원하는 형태로 출력하는 방법
예시 코드
SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println(ft.format(date));
// 22.11.09 at 07:29:21 오후 KST
클래스는 Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스이다
캘린더 클래스는 추상클래스이다.
미완성 클래스, 추상화를 한 클래스
추상화란 - 공통의 속성이나 기능을 묶어 이름을 붙이는 것
추상메서드에 내용은 아래 정리한 부분을 참고 부탁드립니다
추상클래스는 new 를 사용해서 바로 이용할 수 없음
여기서 Calendar 추상화 클래스를 사용하기 위해 getInstance 메소드를 호출하면 기본적으로 java.util.GregorianCalendar 인스턴스를 만들어서리턴한다.
하지만 나중에 다른 새로운 형식의 표준달력이 필요할 경우 해당 형식의 표준달력으로 인스턴스를 만들어 리턴하게 하면 사용할 수 있다.
이것이 Calendar 추상화 클래스의 장점이다.
즉 Calendar 의 역할을 할 수 있도록 추상화를 해놓은 것이라 할 수 있다.
아래는 Calendar 의 사용 예시입니다.
int yyyy = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 월은 0부터 시작합니다.
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
cal.add(Calendar.HOUR, 5); // add메소드를 통해 Calendar 객체를 5시간 후로 구할 수 있다.
현재 calendar에 시간을 5시간 더하는 방법. 5를 -5로 수정하면 5시가 전을 구할 수 있게 됩니다.
package programmers.intermediate;
import java.util.Calendar;
public class CalendarExam {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int yyyy = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
/**
* 만약 100일 후의 시간과 날짜를 구하고 싶다면?
*/
String s = yyyy+"년"+month+"월"+date+"일"+hour+"시간"+minute+"분";
cal.add(Calendar.DATE, 100);
System.out.println(s);
}
}
자바 7이전 까지는 Date와 Calendar 클래스를 이용해서 날짜와 시간 정보를 얻을 수 있었다.
Calendar 클래스는 날짜와 시간 정보를 얻기 에는 충분하지만, 날짜와 시간을 조작하거나 비교하는 기능이 불충분하다.
그래서 자바 8부터 날짜와 시간을 나타내는 여러가지 API를 새롭게 추가했다.
이 API는 java.util 패키지에 없고 별도로 java.time 패키지와 하위 패키로 제공 된다.
java.time 패키지에는 다음과 같이 날짜와 시간을 표현하는 5개의 클래스가 있다.
그 중 사용 빈도가 높은 3가지 클래스(LocalDate, LocalTime, LocalDateTime)를 살펴보겠습니다.
LocalDate
로컬 날짜 클래스로 날짜 정보만을 저장
두가지 정적 메소드로 얻는다
now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalDate 객체를 리턴
of() => 매개값으로 주어진 날짜 정보를 저장한 LocalDate 객체를 리턴
LocalDate currDate = LocalDate.now();
LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
// 2022-11-09
LocalTime
로컬 시간 클래스로 시간 정보만을 저장,
now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalTime 객체를 리턴
of() => 매개값으로 주어진 날짜 정보를 저장한 LocalTime 객체를 리턴
LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second,int nanoOfSecond)
// 19:51:05.839524800 포맷을 통해 수정할 수 있습니다.
LocalDateTime
LocalDated와 LocatTime을 결합한 클래스,
날짜와 시간정보 모두 저장
now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalDateTime 객체를 리턴
of() => 매개값으로 주어진 날짜 정보를 저장한 LocalDateTime 객체를 리턴
LocalDateTime currDateTime = LocalDateTime.now();
LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minutem int second, int nanoOfsecond);
// 2022-11-09T19:51:59.157015600
LocalDate와 LocalTime 은 프로그램에서 날짜와 시간정보를 이용할 수 있도록 다음과 같은 메소드 제공
참고자료 - time패키지