추상클래스 이기때문에 new Calendar(); 대신 Calendar.getInstance(); 사용
이때 구현 클래스는 GregorianCalendar 와 BuddhistCalendar 가 있는데 getInstance()가 시스템의 국가와 지역설정을 확인하여 태국인 경우 Buddhist 를 그 외는 Gregorian의 인스턴스를 반환한다.
getInstance()로 얻은 인스턴스는 현재 날짜와 시간 정보 담고 있음
get(Calendar.MONTH); 로 달 확인 가능
0~11의 값으로 리턴하므로 1더하여 사용해야함
이처럼 인스턴스를 직접 생성하지 않고 메서드를 통해 반환 받게 한다면 최소한의 변경으로 프로그램이 동작할 수 있다.
새로운 역법이 추가되어도 getInstance() 만 수정하여 사용가능하다.
Date d = new Date();
...
Calender cal = Calendar.getInstance();
cal.setTime(d);
Calender cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis());
두 날짜의 최소단위인 초단위로 변경한 다음 그 차이를 구하면 된다.
숫자, 날짜 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 제공하는 클래스
숫자를 형식화 하는데 사용
String num = "1234567.89";
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(num);
// result = "1.2E6"
날짜 데이터 출력하는데 사용
Date 만 가능하고 Calendar는 안됨
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
// result = "2022-03-08"
df.parse() 를 사용하면 format에서 date로 다시 변환 가능하다.
특정 범위에 속하는 값을 문자열로 변환해줌
double[] limits = {60, 70, 80, 90};
String[] grades = {"D", "C", "B", "A"};
ChoiceFormat form = new ChoiceFormat(limits, grades);
String result1 = form.format(95); // A
String result2 = form.format(64); // D
데이터를 정해진 양식에 맞게 출력할 수 있도록 해줌
Date, Calendar의 단점 해소한 패키지로 JDK1.8부터 추가됨
String 처럼 불변이라 멀티 쓰레드 환경에서 안전하다.
LocalTime 클래스 : 시간 표현할 때 사용
LocalDate 클래스 : 날짜 표현할 때 사용
LocalDateTime 클래스 : 날짜와 시간 모두 표현할 때 사용
ZoneDateTime 클래스 : 시간대와 날짜와 시간 모두 표현할 때 사용
Period : 날짜 - 날짜
Duration : 시간 - 시간
에포크 타임 (1970-01-01 00:00:00 UTC) 부터 경과된 시간을 나노초 단위로 표현
보기는 불편하지는 계산에는 편리함
이번 달의 3번째 금요일은 며칠인지 같은 계산에 사용