본문 바로가기
Java/Java

[자바의 정석_기초편] Chapter10. 날짜와 시간 & 형식화

by HJ0216 2023. 5. 20.

이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

 

🟣 기본 환경: IDE: Eclipse, Language: Java

 

 

 

 

java.util.Date: 날짜와 시간을 다룰 목적으로 만들어진 class

Date Method는 거의 deprecated(앞으로 사라질 수도 있으니 사용하지 말라)되었지만, 여전히 사용 중

 

java.util.Calendar: Data class를 개선한 새로운 class

 

java.time package: Data와 Calendar의 단점을 개선한 새로운 class를 제공

 

Calendear class(abstract class)

-> 인스턴스 생성할 수 X

 

Calendar cal = new Calendar(); (X)

-> getInstance() method 사용하여 객체 생성

Calendar cal = Calendar.getInstance();

 

get()으로 날짜와 시간 필드 가져오기: int get(int field)

Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 셋팅됨

int this Year = cal.get(Calendar.YEAR); // 올해가 몇년인가

int lastDayOfMonth = cal.getActualMaxium(Calendar.DATE); // 이 달의 마지막날

 

Calendar에 정의된 필드

 

- YEAR: 년

- MONTH: 월(0부터 시작)

- DATE: 일

- WEEK_OF_YEAR: 그 해의 몇 번째 주

- WEEK_OF_MONTH: 그 달의 몇 번째 주

- DAY_OF_MONTH: 그 달의 몇 번째 일

- DAY_OF_YEAR: 그 해의 몇 번째 일

- DAY_OF_WEEK: 요일(1: 일요일)

- DAY_OF_WEEK_IN_MONTH: 그 달의 몇 번째 요일

- HOUR: 시간(0~11)

- HOUR_OF_DAY: 시간(0~23)

- MINUTE: 분

- SECOND: 초

- MILLISECOND: 천분의 일초

- ZONE_OFFSET: GMT 기준 시차

- AM_PM: 오전, 오후

* 날짜 지정 시, 월이 0부터 시작한다는 점에 유의

 

날짜 간의 차이: 초단위로 변경 후 계산→년월일로 재변환

* 초→시분초로 재변환 시, 거스름돈 큰 것부터 나눠주는 방식 차용

1460원= 500_2개+100_4개+50_1개+10_1개

 

clear()는 calendar 객체의 모든 필드를 1970.1.1 00:00:00으로 초기화

→ 객체를 생성하고 나서는 clear()를 꼭 해주고 나서 set method 사용

 

 

clear(int field)는 calendar 객체의 특정 필드를 초기화

get(): 필드 읽기

set(): 필드 변경

add(): 특정 필드 값을 증가 또는 감소

- 다른 필드에 영향: 8월 31일→ +1일→ 9월 1일

roll(): 특정 필드 값을 증가 또는 감소

- 다른 필드에 영향X: 8월 31일→ +1일→ 8월 1일

 

달력 만들기

 

Date Method의 대부분은 deprecated 되었지만 여전히 사용 중

calendar와의 호환이 필요할 때가 있음

* 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);

 

형식화 class: DecimalFormat, SimpleDateFormat

숫자와 날짜를 원하는 형식으로 쉽게 출력 가능

(숫자, 날짜↔문자열)

 

* DecimalFormat: 숫자→형식 문자열

double number = 1234567.89;

DecimalFormat df = new DecimalFormat(”#.#E0”)

String result = df.format(number); // 1.2E6

 

형식 문자열→숫자

DecimalFormat df = new DecimalFormat(”#,###.##”);

Number num = df.parse(”1,234,567.89”);

double d = num.doubleValue(); // 1234567.89

* Integer.parseInt는 ','가 포함된 문자열을 숫자로 변환 못함

 

* SimpleDateFormat()

Date today = new Date();

SimpleDateFormat df = new SimpleDateFormat(”yyyy-MM-dd”);

String result = df.format(today); // 2023-01-01

 

M-Month, m-minute

D-1년 기준, d-해당 월 기준

H-23시간제, h-12간제

m-분, s-초

 

 

 

 

 

소스 코드

🔗 HJ0216/java-practice

 

참고 자료

📑 [자바의 정석] ch10-4~8 Calendar예제