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)