도서 정리/자바의 정석

[자바의 정석] CH10 날씨와 시간 & 형식화

다아빈 2025. 4. 21. 20:45
728x90
반응형

자바의 정석 책을 공부하고 정리한 글입니다!

혹시라도 틀린 부분이 있다면 친절하게 알려주세요.

 

감사합니다!


CH10. 날짜와 시간 & 형식화

형식화 클래스

  • DecimalFormat
    숫자를 형식화 하는데 사용되는 클래스입니다. 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있으며, 반대로 일정한 형식의 텍스트 데이터를 숫자로 쉽게 변환하는 것도 가능합니다.
  • SimpleDateFormat
    날짜 데이터를 원하는 형태로 출력할 수 있도록 도와주는 클래스입니다.
  • ChoiceFormat
    특정 범위에 속하는 값을 문자열로 변환해주는 클래스입니다. 
    연속적 또는 불연속적인 범위의 값들이 처리하는 데 있어서 if문이나 switch문은 적절하지 못한 경우가 많습니다. 이럴 때 ChoiceFormat을 잘 사용하면 코드를 간단하고 직관적으로 만들 수 있습니다.
  • MessageFormat
    데이터를 정해진 양식에 맞게 출력할 수 있도록 도와주는 클래스입니다. 양식을 미리 작성하고 다수의 데이터를 같은 양식으로 출력할 때 사용하면 좋습니다.

java.time 패키지

Date와 Calendar가 가지고 있는 단점들을 해소하기 위해 JDK1.8부터 java.time 패키지가 추가되었으며, 다음과 같이 4개의 하위 패키지를 갖고 있습니다.

  • java.time.chrono: 표준(ISO)이 아닌 달력 시스템을 위한 클래스 제공
  • java.time.format: 날짜와 시간을 파싱하고, 형식화하기 위한 클래스 제공
  • java.time.temporal: 날짜와 시간의 필드와 단위를 위한 클래스 제공
  • java.time.zone: 시간대와 관련된 클래스 제공

위의 패키지들에 속한 클래스들의 가장 큰 특징은 불변(immutable)이라는 것입니다. 따라서 날짜나 시간을 변경하는 메서드들은 기존의 객체를 변경하는 대신 항상 변경된 새로운 객체를 반환합니다. 

 

java.time패키지의 핵심 클래스는 다음과 같습니다:

  • LocalTime: 날짜 표현
  • LocalDate: 시간 표현
  • LocalDateTime: 날짜 + 시간 표현
  • ZonedDateTime: 날짜 + 시간 + 시간대까지 표현

LocalDate와 LocalTime

java.time패키지의 가장 기본이 되는 클래스로, 객체 생성 방법은 다음과 같습니다.

// now()로 생성하는 방법
LocalDate today = LocalDate.now(); // 오늘의 날짜
LocalTime now = LocalTime.now(); // 현재 시간

// of()로 생성하는 방법
LocalDate birthDate = LocalDate.of(2001, 11, 09); // 2001년 11월 9일
LocalTime birthTime = LocalTime.of(11, 31, 17); // 11시 31분 17초

now(), of()는 모두 static 메서드 입니다.

LocalDateTime과 ZonedDateTime

LocalDateTime은 다음과 같이 만들 수 있습니다.

// LocalDate와 LocalTime으로 만들기
LocalDate date = LocalDate.of(2001, 11, 09);
LocalTime time = LocalTime.of(11, 31, 17);
LocalDateTime birth = LocalDateTime(date, time);

// of(()
LocalDateTime dateTime = LocalDateTime.of(2001, 11, 09, 11, 31, 17);

// now()
LocalDateTime today = LocalDateTime.now();

 

LocalDateTime에 시간대를 추가하면 ZonedDateTime이 됩니다. 이때 atZone()을 사용하면 시간대 정보를 얻을 수 있습니다. 다음은 LocalDateTime으로 ZonedDateTime을 만드는 코드입니다.

ZoneId zid = ZoneId.of("Asial/Seoul");
ZonedDateTime zdt = dateTime.atZone(zid):

 

 

728x90
반응형