JAVA 기초

[JAVA 기초] JAVA의 정석 - Ch.10 날짜와 시간 & 형식화 (정리)

beginner-in-coding 2025. 1. 17. 15:47

Ch.10 날짜와 시간 & 형식화


-      날짜와 시간

  • Calendar와 Date
    • Date: 날짜와 시간을 다룰 목적 (단점: 날짜와 시간을 같이 다룸)
    • Calendar: Date의 부족한 기능을 보완 (단점: 멀티 쓰레드 환경에서 안전하지 않음)
      • Calendar의 getInstance()를 통해 객체 얻음
    • java.time: Date와 Calender의 부족한 기능을 보완
    • Calendar와 Date의 변환
      • Calendar → Date
        • Date d = new Date(Calendar.getInstance().getTimeInMillis()); 
      • Date → Calendar
        • Calendar c = Calendar.getInstacne().setTime(new Date());

-      형식화 클래스

  • DecimalFormat
    • java.txt에 포함
    • 숫자를 형식화
    • 숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있음
      • 역으로 형식화된 문자열에서 데이터를 얻을 수 있음
  • SimpleDateFormat
    • 날짜 데이터를 원하는 형태로 출력할 수 있음
    • 사용 방법
      1. 원하는 출력 형식의 패턴을 작성해서 SimpleDateFormat의 인스턴스를 생성
      2. 출력하고자하는 Date 인스턴스를 SimpleDateFormat의 format(Date d)를 이용해서 String으로 반환 받음
    • Calendar의 출력 형식을 바꾸고 싶은 경우, Calander를 Date로 변환하여 사용
  • ChoiceFormat
    • 특정 범위에 속하는 값을 문자열로 변환
    • 연속적/불연속적인 범위의 값들을 처리하는 데 유용
    • 사용 방법
      • ChoiceFormat c = new ChoiceFormat(double[] limits, String[] formats);
  • MessageFormat
    • 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와줌
    • 데이터가 들어갈 자리를 마련해놓은 양식을 미리 작성하고 프로그램을 이용해서 다수의 데이터를 같은 양식으로 출력할 때 사용
    • 또한 parse를 이용해서 지정된 양식에서 필요한 데이터를 추출할 수 있음

-      Java.time 패키지

  • Java.time 패키지의 핵심 클래스
    • LocalDate 클래스 + LocalTime 클래스 = LocalDateTime 클래스
    • LocalDateTime 클래스 + 시간대 = ZonedDateTime
    • 날짜와 날짜의 차이: Pariod
    • 시간과 시간의 차이: Duration
    • 객체 생성 방법
      • now(): 현재 날짜와 시간을 저장하는 객체 생성
      • of(): 해당 필드의 값을 지정
  • LocalDate LocalTime
    • 생성: now(), of()
    • 특정 필드의 값 가져오기: get(), getXXX()
    • 필드의 값 변경하기: with(), plus(), minus()
  • Instant
    • 에포크 타임부터 경과된 시간을 나노초 단위로 표현
    • 생성 방법: now(), ofEpochSecond()
    • 필드의 값 가져오기: getNano(), getEpochSecond()
  • LocalDateTime ZonedDateTime
    • LocalTime과 LocalDate로 LocalDateTime 만들기
      • LocalDateTime dt = LocalDateTime.of(LocalDate date, LocalTime time);
      • 또는 직접 지정할 수 있는 of()와 now()가 정의되어 있음
    • LocalDateTime을 LocalDate와 LocalTime으로 나누기
      • LocalDateTime의 toLocalDate() 이용
      • LocalDateTime의 toLocalTime() 이용
    • ZonedDateTime의 변환 (일부)
      • LocalDate: toLocalDate()
      • LocalTime: toLocalTime()
    • ZonedDateTime과 GregorianCalendar의 변환
      • ZonedDateTime → GregorianCalendar: from(ZonedDateTime zdt)
      • GregorianCalendar  ZonedDateTime: toZonedDateTime()
  • TemporalAdjusters
    • 자주 쓰일만한 날짜 계산들을 대신해주는 메서드를 정의해놓은 클래스
    • 직접 만들기 위해서는 TemporalAdjuster 인터페이스를 구현
  • Period Duration
    • 두 날짜의 차이를 나타내는 방법: between(), until()  //각각 static, 인스턴스 메서드
    • 특정 필드의 값을 얻는 방법: get()
    • 사칙 연산, 비교연산 등: plus(), minus() 등
  • 파싱과 포맷
    • 파싱: 데이터에서 필요한 부분만 해석해서 가져오기
    • 포맷: 날짜와 시간을 원하는 형식으로 출력
    • DateTimeFormatter
      • 직접 원하는 형식으로 포멧하기: ofPattern("출력형식지정")
      • 문자열을 날짜와 시간으로 파싱하기: parse(CharSequnce text, DateTimeFormatter formatter)