java.util.Date
: JDK 1.0
java.util.Calendar
: JDK 1.1
Joda-Time
: 외부라이브러리로 자바 표준에 포함되지 않아서, 프로젝트에 별도로 추가해야함
java.time 패키지
: JDK 1.8(자바8)에서 위 Joda-Time
을 기반으로 표준 API로 도입
LocalDate
: 날짜만 표현할 때 사용LocalDate nowDate = LocalDate.now(); // 현재날짜 객체 생성 LocalDate.now()
LocalDate ofDate = LocalDate.of(2024,5,24); // 지정날짜 객체 생성 LocalDate.of()
ofDate = ofDate.plusDays(10); // 날짜 연산 plusDays()
LocalTime
: 시간만 표현할 때 사용LocalTime nowTime = LocalTime.now(); // 현재시간 객체 생성 LocalTime.now()
LocalTime ofTime = LocalTime.of(9,10,30); // 지정시간 객체 생성 LocalTime.of()
LocalTime ofTimePlus = ofTime.plusSeconds(30); // 시간연산
LocalDateTime
: 날짜와 시간을 둘 다 표현할 때 사용LocalDateTime nowDt = LocalDateTime.now(); // 현재날짜시간 객체 생성
LocalDateTime ofDt = LocalDateTime.of(2024,5,22,11,6,23); // 지정날짜시간 객체 생성
// LocalDateTime 객체에는 LocalDate와 LocalTime 클래스가 들어있어서 날짜와 시간 분리가 가능하다
LocalDate ld = ofDt.toLocalDate(); // 날짜만 분리하는 메소드로 반환형은 LocalDate 타입이여야함
LocalTime lt = ofDt.toLocalTime(); // 시간만 분리하는 메소드로 반환형은 LocalTime 타입이여야함
// of() 메소드로 다시 합체가능
LocalDateTime ldt = LocalDateTime.of(ld,lt);
// 연산도가능
// 비교
boolean flag = nowDt.isBefore(ofDt); // 현재날짜시간보다 지정날짜시간이 더 이전인지 판단
boolean flag1 = nowDt.isAfter(ofDt); // 현재날짜시간보다 지정날짜시간이 더 이후인지 판단
boolean flag2 = nowDt.isEqual(ofDt); // 현재날짜시간과 지정날짜시간이 같은지 판단
Local
이 붙은이유는 세계 시간대를 고려하지 않고, 특정 지역의 날짜와 시간만을 고려할 때 사용
-> 주로 국내서비스만 개발할 때 사용
ZonedDateTime
: 시간대를 고려한 날짜와 시간을 표현할 때 사용하며, 시간대 표현하는 타임존 포함OffsetDateTime
: 위와 동일하지만, 여기에는 타임존이 없음Year
Month
YearMonth
MonthDay
: 년, 월, 년월, 달일을 각각 다룰 때 사용DayOfWeek
: 월화수목금토일을 나타내는 클래스Instant
: 1970년 1월 1일 0시 0분 0초(UTC)를 기준으로 경과한 시간으로 계산함Period
: 두 날짜 사이의 간격을 년,월,일
단위로 나타냄Duration
: 두 시간 사이의 간격을 시,분,초
단위로 나타냄포맷팅
: 날짜와 시간 데이터를 원하는 포맷의 문자열로 변경하는 것 (Date -> String)// 포맷팅: 날짜를 문자로
LocalDate date = LocalDate.of(2024,12,31);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 DD일");
String formattedDate = date.format(formatter);
LocalDateTime now = LocalDateTime.of(2024,12,31,13,30,59);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = now.format(formatter);
// 파싱: 문자를 날짜로
String input = "2030년 01월 01일";
LocalDate parsedDate = LocalDate.parse(input, formatter);
String dateTimeString = "2030-01-01 11:30:00";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
파싱
: 문자열을 날짜와 시간 데이터로 변경하는 것 (String -> Date)