Java

[자바의 정석] 10장 날짜와 시간

woochii 2023. 7. 24. 22:25
728x90
반응형

1. 날짜와 시간

  • java.util.Date
    • 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK 1.0)
    • Date의 메서드는 거의 deprecated되었지만, 여전히 쓰이고 있다.
  • java.util.Calendar
    • Date클래스를 개선한 새로운 클래스(JDK 1.1). 여전히 단점이 존재한다.
  • java.time 패키지
    • Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK 1.8)
      1. LocalDate
      2. LocalTime
      3. LocalDateTime

2. Calendar

2-1. Calendar 클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = new Calendar();  // 에러. 추상클래스는 객체를 생성할 수 없다.

// OK. getInstance()메서드는 Calendar클래스를 구현한 클래스의 인스턴스를 반환한다.
Calendar cal = Calendar.getInstance();
  • get()으로 날짜와 시간 필드 가져오기
Calendar cal = Calendar.getInstance();  // 현재 날짜와 시간으로 셋팅
int thisYear = cal.get(Calendar.YEAR);  // 올해가 몇년인지 알아낸다.
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);  // 이달의 마지막 날
  • Calendar에 정의된 필드
필드명 설명 필드명 설명
YEAR DAY_OF_WEEK_IN_MONTH 그 달의 몇 번째 요일
MONTH 월(0부터 시작) HOUR 시간(0~11)
WEEK_OF_YEAR 1월1일부터 지금까지의 일 수 HOUR_OF_DAY 시간(0~23)
WEEK_OF_MONTH 그 달의 몇 번째 주 MINUTE
DATE SECOND
DAY_OF_MONTH 그 달의 몇 번째 일 MILLISECOND 천분의 일초
DAY_OF_YEAR 그 해의 몇 번째 일 ZONE_OFFSET GMT기준 시차
DAY_OF_WEEK 요일 AM_PM 오전/오후

 

  • set()으로 날짜와 시간 지정하기
void set(int field, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)
  • clear()는 Calendar 객체의 모든 필드를 초기화
    • 초기화하면 1970년 1월 1일 00:00:00
    • clear(int field)는 Calendar 객체의 특정 필드를 초기화
  • add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향O)
  • roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향X)

2-2. SimpleDateFormat

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
  • 특정 형식으로 되어있는 문자열에서 날짜와 시간을 뽑아낼 수 도 있다.
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String result = sdf.format(today); //오늘 날짜를 yyyy-MM-dd형태로 변환하여 반환


DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2023년 7월 1일");
String result = df2.format(d)
기호 의미 기호 의미
G 연대(BC, AD) H 시간(0~23)
y 년도 k 시간(0~24)
M 월(1~12 또는 1월~12월) K 시간(0~11)
w 년의 몇 번째 주(1~53) h 시간(0~12)
W 월의 몇 번째 주(1~5) m 분(0~59)
D 년의 몇 번째 일(1~366) s 초(0~59)
d 월의 몇 번째 일(1~31) S 천분의 일초(0~999)
F 월의 몇 번째 요일(1~5) z Time zone(General time zone)
E 요일 Z Time zone(RFC 822 time zone)
a 오전/오후(AM/PM) ' escape문자 (특수문자를 표현)

3. java.time 패키지

3-1. java.time 패키지

  • 날짜와 시간을 하나로 표현하는 Calendar 클래스와 달리 날짜와 시간을 따로 분리해 놓았다.
LocalDate + LocalTime = LocalDateTime

 

3-2. LocalDate & LocalTime

LocalDate today = LocalDate.now(); // 오늘의 날짜
LocalTime now = LocalTime.now(); // 현재 시간
클래스 메서드 설명
LocalDate int getYear() 년도(1999)
int getMonthValue() 월(12)
Month getMonth() 월(DECEMBER)
int getDayOfMonth() 일(31)
int getDayOfYear() 같은 해의 1월 1일부터 몇 번째 일(365)
DayOfWeek getDayOfWeek() 요일(5)
int lengthOfMonth() 같은 달의 총 일수(31)
int lengthOfYear() 같은 해의 총 일수(366)
boolean isLeapYear() 윤년 여부 확인
LocalTime int getHour() 시(23)
int getMinute() 분(59)
int getSecond() 초(59)
int getNano 나노초(0)

 

3-3. LocalDateTime

  • LocalDate와 LocalTime을 합쳐놓은 것

References

https://github.com/castello/javajungsuk_basic

 

GitHub - castello/javajungsuk_basic: 자바의 정석 기초편 관련 자료입니다.

자바의 정석 기초편 관련 자료입니다. Contribute to castello/javajungsuk_basic development by creating an account on GitHub.

728x90
반응형