[Java/Algorithm] LocalDateTime등 시간 관련 클래스 핵심 정리
by
기존 Date, Caledar 클래스의 단점은 Naver D2 - Java의 날짜와 시간 API 에서 잘 설명되어 있다.
이 포스트에선 날짜와 시간을 다루기 위해 자주쓰이는 클래스와 메서드 사용법을 정리하는 것을 목적으로 하겠습니다.
주요 클래스들
LocalTime : 시,분,초 를 표현하는 클래스
LocalDate : 년,월,일을 표현하는 클래스 (ex : 2002-05-09)
LocalDateTime : 년,월,일,시,분,초를 표현하는 클래스 (ex : 2007-12-03T10:15:30)
1. 날짜, 시간 객체 생성하기
날짜 가져오기
LocalDate.now(); // 오늘
LocalDateTime.now(); // 지금
LocalDate.of(2015, 4, 17); // 2015년 4월 17일
LocalDateTime.of(2015, 4, 17, 23, 23, 50); // 2015년 4월 17일 23시 23분 50초
String -> LocalDateTime 날짜변환
LocalDateTime.parse("2007-12-03T10:15:30"); // 2007-12-03T10:15:30
LocalDateTime.parse("2010-11-25 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2010-11-25T12:30
리턴 타입 | 메소드(매개변수) | 설명 |
---|---|---|
int | getHour() | 시간 |
int | getMinute() | 분 |
int | getSecond() | 초 |
int | getNano() | 나노초 |
2. 날짜와 시간 조작하기
날짜와 시간을 더하기거나 빼는 메소드
LocalDateTime currentDateTime = LocalDateTime.now();
LocalDateTime targetDateTime = currentDateTime
.plusYears(long) // 년도 더하기
.minusYears(long) // 년도 빼기
LocalDateTime targetDateTime2 = currentDateTime
.plusHours(long) // 시간 더하기
.minusHours(long) // 시간 빼기
3. 날짜와 시간을 비교하는 메소드
LocalTime startTime = LocalTime.now(); // 23:52:35.603
LocalTime endTime = LocalTime.of(23, 59, 59);
// startTime이 endTime 보다 이전 시간 인지 비교
startTime.isBefore(endTime); // true
// startTime이 endTime 보다 이후 시간 인지 비교
startTime.isAfter(endTime); // false
// 동일 날짜인지 비교
// LocalDate, LocalDateTime에서 사용가능
startDateTime.isEqual(endDateTime);
4. 시간 차이 계산하기
ChronoUnit클래스의 between(Temporal start, Temporal end) 메서드 사용
LocalDate startDate = LocalDate.now(); // 2016-04-02
LocalDate endDate = LocalDate.of(2016,5,5);
ChronoUnit.DAYS.between(startDate, endDate); // 결과 : 33 (1개월 3일)
클래스 | 설명 |
---|---|
ChronoUnit.YEARS | 전체 년 차이 |
ChronoUnit.MONTHS | 전체 월 차이 |
ChronoUnit.WEEKS | 전체 주 차이 |
ChronoUnit.DAYS | 전체 일 차이 |
ChronoUnit.HOURS | 전체 시간 차이 |
ChronoUnit.SECONDS | 전체 초 차이 |
ChronoUnit.MILLIS | 전체 밀리초 차이 |
ChronoUnit.NANOS | 전체 나노초 차이 |
다른방법으로 시간 차이 계산하기
-
LocalDate, LocalTime, LocaDateTime의
until(Temporal end, TemporalUnit unit)
메소드 -
java.time.Duration
클래스의between(Temporal start, Temporal end)
메소드
5. 날짜 포맷팅
LocalDate, LocalTime, LocaDateTime 클래스의 format(DateTimeFormatter formatter)
메소드를 사용해서 원하는 문자열로 변환시킬 수 있다.
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분");
String nowString = now.format(dateTimeFormatter); // 결과 : 2016년 4월 2일 오전 1시 4분
반대로 String을 포맷팅을 통해 시간 객체로 변환 할 수도 있다.
String -> LocalDateTime 변환
LocalDateTime.parse("2018-12-03T10:15:30"); // 2018-12-03T10:15:30
LocalDateTime.parse("2019-03-15 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2019-03-15T12:30
LocalDateTime -> String 변환
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDateTime = now.format(formatter); // 2019-03-09 11:44:44
참조 문서 :
[Document (Java Platform SE 8 ) - Oracle Docs]
eomdev’s blog - 자바8의 java.time 패키지(LocalDate, LocalTime, LocalDateTime 등)
Subscribe via RSS