👉🏻 이 글은 자바의 정석(3판) Chapter10을 공부하며 쓴 글입니다.
java.util.Date
날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
사용X
java.util.Calendar
Date클래스를 개선한 새로운 클래스(JDK1.1)
여전히 단점 존재
java.time패키지
Date, Calendar의 단점 개선.(JDK1.8)
날짜와 시간을 따로 다룰 수 있도록 함.
-> LocalDate / LocalTime / LocalDateTime
추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = cal new Calendar(); //Error! 추상클래스는 인스턴스 생성 불가
Calendar cal = Calendar.getInstance(); // Calendar클래스를 구현한 클래스의 인스턴스 반환
get()으로 날짜와 시간 필드 가져오기 int get(int field)
⬇️ int field
| 필드명 | 설명 |
|---|---|
| YEAR | 년 |
| MONTH | 월 (0부터 시작) |
| WEEK_OF_YEAR | 일 |
| WEEK_OF_MONTH | 그 달의 몇 번째 주 |
| DATE | 일 |
| DAY_OF_MONTH | 그 달의 몇 번째 일 |
| DAY_OF_YEAR | 그 해의 몇 번째 일 |
| DAY_OF_WEEK | 요일 |
| DAY_OF_WEEK_IN_MONTH | 그 달의 몇 번째 요일 |
| 필드명 | 설명 |
|---|---|
| HOUR | 시간(0~11) |
| HOUR_OF_DAY | 시간(0~23) |
| MINUTE | 분 |
| SECOND | 초 |
| MILLISECOND | 천분의 일초 |
| ZONE_OFFSET | GMT기준 시차(밀리세컨 단위) |
| AM_PM | 오전/오후 |
void set(int field, int value)
void set(int year, int month, int date)
Calendar date1 = Calendar.getInstance();
date1.set(2017, 7, 15); //2017.08.15
⚠️월(MONTH)이 0부터 시작한다는 점 주의!
time1.set(Calendar.HOUR_OF_DAY, 10);
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30); // 10시 20분 30초
clear()는 Calendar객체의 모든 필드를 초기화
clear(int field)는 Calendar객체의 특정 필드를 초기화
add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향 O)
: 여기서 다른 필드에 영향을 준다는 것을 8월 31일에서 date.add(Calendar.Date, 1)을 하면 자동으로 9월 1일이 되는 것을 의미
roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향 X)
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis()); // Date(long date)Date d = new Date();
...
Calendar cal = Calender.getInstance();
cal.setTime(d);java.text 패키지의 DecimalFormat, SimpleDateFormat
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); //result = "1.2E6"
0 : 10진수(값이 없을 때는 0)
# : 10진수(값이 없으면 생략)
E : 지수기호
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue(); // 1234567.89
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
G : 연대(BC, AD)
y : 년도
M : 월
W : 년의 몇 번째 주 (1~53)
w : 월의 몇 번째 주 (1~5)
D : 년의 몇 번째 일 (1~366)
d : 월의 몇 번째 일 (1~31)
F : 월의 몇 번째 요일 (1~5)
E : 요일
Date d = df.parse("2015년 11월 23일"); // 문자열을 Date로 변환
String result = df2.format(d); // format 변경