자바의 정석 chapter 10

inho ha·2022년 3월 8일
0

자바의 정석

목록 보기
11/18

Calender

추상클래스 이기때문에 new Calendar(); 대신 Calendar.getInstance(); 사용

이때 구현 클래스는 GregorianCalendar 와 BuddhistCalendar 가 있는데 getInstance()가 시스템의 국가와 지역설정을 확인하여 태국인 경우 Buddhist 를 그 외는 Gregorian의 인스턴스를 반환한다.

getInstance()로 얻은 인스턴스는 현재 날짜와 시간 정보 담고 있음

get(Calendar.MONTH); 로 달 확인 가능
0~11의 값으로 리턴하므로 1더하여 사용해야함

이처럼 인스턴스를 직접 생성하지 않고 메서드를 통해 반환 받게 한다면 최소한의 변경으로 프로그램이 동작할 수 있다.
새로운 역법이 추가되어도 getInstance() 만 수정하여 사용가능하다.

Date to Calendar

Date d = new Date();
...
Calender cal = Calendar.getInstance();
cal.setTime(d);

Calendar to Date

Calender cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis());

두 날짜간 차이 구하기

두 날짜의 최소단위인 초단위로 변경한 다음 그 차이를 구하면 된다.

형식화 클래스

숫자, 날짜 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 제공하는 클래스

DecimalFormat

숫자를 형식화 하는데 사용

String num = "1234567.89";
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(num);
// result = "1.2E6"

SimpleDateFormat

날짜 데이터 출력하는데 사용
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로 다시 변환 가능하다.

ChoiceFormat

특정 범위에 속하는 값을 문자열로 변환해줌

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

MessageFormat

데이터를 정해진 양식에 맞게 출력할 수 있도록 해줌

java.time 패키지

Date, Calendar의 단점 해소한 패키지로 JDK1.8부터 추가됨

String 처럼 불변이라 멀티 쓰레드 환경에서 안전하다.

LocalTime 클래스 : 시간 표현할 때 사용
LocalDate 클래스 : 날짜 표현할 때 사용
LocalDateTime 클래스 : 날짜와 시간 모두 표현할 때 사용
ZoneDateTime 클래스 : 시간대와 날짜와 시간 모두 표현할 때 사용

Period : 날짜 - 날짜
Duration : 시간 - 시간

Instant

에포크 타임 (1970-01-01 00:00:00 UTC) 부터 경과된 시간을 나노초 단위로 표현
보기는 불편하지는 계산에는 편리함

TemporalAdjusters

이번 달의 3번째 금요일은 며칠인지 같은 계산에 사용

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글