java.util.Date;
날짜와 시간을 다룰 목적으로 만들어진 클래스
Date의 메서드는 거의 deprecated(앞으로 사용하지 않음)됐지만, 여전히 쓰이고 있다
java.util.Calendar;
Date 클래스를 개선한 새로운 클래스 여전히 단점이 존재한다
java.time 패키지
Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공한다 (JDK1.8)
Calendar 클래스
추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다
Calendar cal = Calendar.getInstance(); //추상클래스인 Calendar는 인스턴스를 생성x
get()으로 날짜와 시간 필드 가져오기 : int get(int field)
int thisYear = cal.get(Calendar.YEAR); //올해가 몇 년인지
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); //이 달의 마지막날
**get으로 얻어오는 값의 범위는 0부터 시작한다
Date와 Calendar간의 변환
1. Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());
2. Date를 Calendar로 변환
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d)
getTimeInMillis() : 1/1000초 단위로 값을 반환
set()으로 날짜와 시간 지정하기
void set(int field, int value)
clear()는 Calendar객체의 모든 필드를 초기화
Calendar dt = Calendar.getInstance(); //현재시간
System.out.println(new Date(dt.getTimeInMillis()));
dt.clear(); //초기화
System.out.println(new Date(dt.getTimeInMillis()));
**clear(int field)는 Calendar객체의 특정 필드를 초기화
add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향있음)
date.add(Calendar.DATE,+1);
date.add(Calendar.MONTH, -8);
roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향X)
date.roll(Calendar.DATE, 1);
date.roll(Calendar.MONTH, -8); //자주 사용하진 않는다
날짜계산을 위한 몇 가지 메서드
boolean isLeapYear(int year) | 매개변수 year가 윤년이면 true 아니면 false |
int dayDiff(int y1, int m1, int d1, int y2, int m2, int d2) | 두 날짜간의 차이를 일 단위로 변환 |
int getDayOfWeek(int year, int month, int day) | 지정한 날짜의 요일을 반환 |
String convertDayToDate(int day) | 일 단위의 값을 년월일의 형태의 문자열로 변환 후 반환 |
int convertDateToDay(int year, int month, int day) | 년월일을 입력받아 일단위로 변환 |
형식화 클래스
java.text 패키지에 포함되어 있으며, 숫자 날짜 텍스트 데이터를 일정한 형식에 맞게
표현할 수 있는 방법을 객체지향적으로 설계하여 표준화하였다.
DecimalFormat
숫자를 형식화 하는데 사용된다
특정 형식의 문자열을 숫자로 변환할때도 사용한다
숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat(“#.#E0”);
String result = df.format(number);
형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
DecimalFormat df = new DecimalFormat(“#,###.##”);
Number num = df.parse(“1,234,567.89”);
double d = num.doubleValue();
**Number클래스는 모든 숫자 래퍼 클래스의 최고 조상이다
SimpleDateFormat
날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);
String result = df.fomat(today);
특정 형식으로 되어있는 문자열에서 날짜와 시간을 뽑아낼 수 있다
DateFormat df = new SimpleDateFormat();
DateFormat df2 = new SimpleDateFormat();
Date d = df.parse(“”);
String result = df2.format(d);
parse(String resource)
문자열 source를 날짜 Date인스턴스로 변환해주기 때문에 유용하게 사용할 수 있다
지정된 패턴으로 입력되지 않을경우 예외가 발생하기 때문에 적절한 예외처리가 필요하다
ChoiceFormat
특정 범위에 속하는 값을 문자열로 반환한다
limits : 범위의 경계값을 저장한다
grades : 범위에 포함된 값을 치환할 문자열을 저장하는데 사용된다
경계값은 double형으로 오름차순으로 정렬되어 있어야 한다
MessageFormat
데이터를 정해진 양식에 맞게 출력할 수 있게한다
다수의 데이터를 같은 양식으로 출력할 때 사용한다