TIL_230301_자바의 정석 복습_날짜와 시간 & 형식화

창고·2023년 3월 1일
0

본 내용은 <자바의 정석> 내용을 복습, 정리하였습니다.

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

1. 날짜와 시간

(1) Calander, Date

  • JDK1.0부터 제공되어 왔던 클래스, 현재는 JDK1.8에 추가된 time 패키지를 사용하고 있음

2. 형식화 클래스

(1) DecimalFormat

  • 숫자를 형식화 할 때 사용하는 클래스
  • 패턴에 사용되는 기호는 API 문서 참고
  • 사용법
double number = 1234567.89
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number);

(2) SimpleDateFormat

  • 날짜 데이터를 출력할 때 사용하는 클래스
  • DateFormat은 해당 클래스의 조상 클래스
  • 사용법
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);

(3) ChoiceFormat

  • 특정 범위에 속하는 값을 문자열로 변환
  • 연속적, 불연속적 범위의 값들을 사용할 때 아주 유용 (if, switch 문의 경우 적절하지 않을 수 있음)
  • 사용법
double[] limits1 = {60, 70, 80, 90}; // 작은 값부터 적어야 함
String limitsPattern = "60#D|70#C|80#B|90#A"; // #은 경계값 포함, <는 포함 X
String[] grades = {"D", "C", "B", "A"}; // limits와 개수가 동일해야 함

ChoiceFormat form = new ChoiceFormat(limits1, grades);

(4) MessageFormat

  • 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와줌
  • 데이터가 들어갈 자리를 마련해놓은 양식을 미리 작성하고 프로그램을 이용해 다수의 데이터를 같은 양식으로 출력할 때 사용하면 좋음
  • 사용법
String msg = "Name: {0} \nTel: {1}";
Object[] arguments = {"코코볼", "010-0000-0000"};

String result = MessageFormat.format(msg, arguments);

3. java.time 패키지

(1) LocalDate, LocalTime

  • time 패키지의 가장 기본이 되는 클래스이며 나머지는 이 두 클래스를 확장한 것
LocalDate today = LocalDate.now();
LocalTime now = LocalTime.now();

LocalDate birthDate = LocalDate.of(1999, 12, 31);
LocalTime birthTime = LocalTime.of(23, 59, 59);
  • get(), getXXX() 로 특정 필드의 값을 가져옴
  • 날짜, 시간의 비교 : isAfter(), isBefore(), isEqual()

(2) LocalDateTime, ZonedDateTime

  • LocalDateTime = LocalDate + LocalTime
  • ZonedDateTime = LocalDateTime + 시간대
// LocalDateTime -> ZonedDateTime 변환
ZoneId zid = ZoneId.of("Asia/Seoul");
ZonedDateTime zdt = LocalDate.now().atStartOfDay(zid);

(3) TemporalAdjusters

  • 지난주 토요일, 이번 달의 3번째 금요일은 며칠인지 등의 날짜 계산은 plus(), minus() 등으로 구현하기 불편
  • 자주 쓰일만한 날짜 계산들을 대신 해주는 메서드를 정의해놓은 것
    • firstDayOfNextYear()
    • firstDayOfNextMonth()
    • next() 등...
  • 직접 구현도 가능
// TemporalAdjuster 인터페이스
@FunctionalInterface
public interface TemporalAdjuster {

	// 해당 메서드를 오버라이딩
    Temporal adjustInfo(Temporal temporal);

}

(4) Period, Duration

  • Period = 날짜 - 날짜
  • Duration = 시간 - 시간
  • between()과 until()
    • 둘 다 각 날짜, 시간의 차이를 구하는 메서드
    • between()은 static 메서드, until()은 인스턴스 메서드
  • 다른 단위로 변환도 가능
    • toTotalMonths(), toDays() 등...
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글