반응형
안녕하세요. 개발자 Jindory입니다.
오늘은 LocalDate, LocalTime, LocalDateTime이 어떤 자료형이며 활용 방법에 대해서 작성해보고자 합니다.
# 글 작성 이유
날짜 데이터를 만들기 위해서 LocalDateTime을 자주 사용하는데, 날짜를 생성, 날짜 더하기 빼기 등 활용방법에 대해서 숙지하지 못하고 있는것 같아서 정리해보고자 합니다.
# 날짜 시간 Class 정의 및 초기화
- java.time 패키지에서 가장 기본이 되는 클래스이며, 시간를 나타내는 클래스입니다.
- LocalTime은 시간을 나타내는 변경할 수 없는 날짜 개체로, 종종 시간-분-초로 표시됩니다.
- 시간은 나노세컨드까지 표현됩니다.
- 예를들어 13:25.30.123456789"값을 LocalTime에 저장할 수 있습니다.
- 이 클래스는 날짜나 시간대를 저장하지 않습니다.
생성 및 초기화
// 현재 시간 생성 및 초기화
LocalTime nowTime = LocalTime.now(); // 06:36:08.273679500
// 특정 시간 생성 및 초기화
LocalTime hourMinute = LocalTime.of(10, 15); // 10:15
LocalTime hourMinuteSecond = LocalTime.of(10, 15, 32); // 10:15:32
LocalTime hourMinuteSecondNanoSecond = LocalTime.of(10, 15, 32, 48621); // 10:15:32.000048621
// 특정 기간을 계산하여 시간 계산
LocalTime calculateTime = LocalTime.ofSecondOfDay(86399); // 23:59:59
// 문자를 시간으로 변환
LocalTime convertTime = LocalTime.parse("23:59:59"); // 23:59:59
- java.time 패키지에서 가장 기본이 되는 클래스이며, 날짜를 나타내는 클래스입니다.
- LocalDate는 날짜를 나타내는 변경할 수 없는 날짜 개체로, 종종 년-월-일로 표시됩니다.
- 요일, 요일 및 요일과 같은/다른 날짜 필드에도 접근이 가능합니다.
- 예를 들어 "2일 10월 2007년"값을 LocalDate에 저장할 수 있습니다.
- 이 클래스는 시간의 전보를 저장하거나 나타내지 않습니다
생성 및 초기화
// 현재 날짜 생성 및 초기화
LocalDate nowDate = LocalDate.now(); // 2022-10-31
// 특정 날짜 생성 및 초기화
LocalDate yearMonthDay = LocalDate.of(2022,10,31); // 2022-10-31
LocalDate yearMonthTypeDate = LocalDate.of(2022,Month.OCTOBER,31); // 2022-10-31
// 특정 기간을 계산하여 날짜 계산
LocalDate calculateDate = LocalDate.ofYearDay(2022, 300); // 2022-10-27
// 문자를 날짜로 변환
LocalDate convertDate = LocalDate.parse("2022-10-31"); // 2022-10-31
- LocalDateTime은 날짜-시간을 나타내는 변경할 수 없는 날짜-시간 개체로, 종종 년-월-일-시-분-초로 표시하는 객체입니다.
- 요일,요일 및 요일과 같은/다른 날짜 및 시간 필드에도 접근할 수 있습니다.
- 시간은 나노세컨드까지 표현됩니다.
- 예를들어 "2일 10월 2007 13:45.30.1231234569" 의 날짜-시간을 LocalDateTime에 저장할 수 있습니다.
초기화 및 생성
// 현재 시간,날짜 생성 및 초기화
LocalDateTime nowDateTime = LocalDateTime.now(); // 2022-10-31T06:42:19.212309500
// 특정 시간,날짜 생성 및 초기화
LocalDateTime dateTime = LocalDateTime.of(2022, 10, 31, 8, 12, 15, 48652); // 2022-10-31T08:12:15.000048652
LocalDate yearMonthDay = LocalDate.of(2022,10,31);
LocalTime hourMinute = LocalTime.of(10, 15);
LocalDateTime dateTypeTimeType = LocalDateTime.of(yearMonthDay,hourMinute); // 2022-10-31T10:15
# 날짜 및 시간 변경
* 원하는 날짜와 시간으로 변경
// 원하는 시간으로 변경
LocalTime hourMinuteSecondNanoSecond = LocalTime.of(10, 15, 32, 48621);
LocalTime changeHour = hourMinuteSecondNanoSecond.withHour(17); // 17:15:32.000048621
LocalTime changeMinute = hourMinuteSecondNanoSecond.withMinute(24); // 10:24:32.000048621
LocalTime changeSecond = hourMinuteSecondNanoSecond.withSecond(46); // 10:15:46.000048621
LocalTime changeNanoSecond = hourMinuteSecondNanoSecond.withNano(12345); // 10:15:32.000012345
// 원하는 날짜로 변경
LocalDate yearMonthDay = LocalDate.of(2022,10,31);
LocalDate changeYear = yearMonthDay.withYear(2013); // 2013-10-31
LocalDate changeMonth = yearMonthDay.withMonth(7); // 2022-07-31
LocalDate changeDay1 = yearMonthDay.withDayOfMonth(15); // 2022-10-15
LocalDate changeDay2 = yearMonthDay.withDayOfYear(15); // 2022-01-15
* 원하는 시간 더하고 / 빼기
// 원하는 시간 더하기
LocalTime hourMinuteSecondNanoSecond = LocalTime.of(10, 15, 32, 48621);
LocalTime plusHours = hourMinuteSecondNanoSecond.plusHours(4); // 14:15:32.000048621
LocalTime plusMinutes = hourMinuteSecondNanoSecond.plusMinutes(50); // 11:05:32.000048621
LocalTime plusSeconds = hourMinuteSecondNanoSecond.plusSeconds(40); // 10:16:12.000048621
LocalTime plusNanoSeconds = hourMinuteSecondNanoSecond.plusNanos(100000); // 10:15:32.000148621
// 원하는 시간 빼기
LocalTime minusHours = hourMinuteSecondNanoSecond.minusHours(11); // 23:15:32.000048621
LocalTime minusMinutes = hourMinuteSecondNanoSecond.minusMinutes(35); // 09:40:32.000048621
LocalTime minusSeconds = hourMinuteSecondNanoSecond.minusSeconds(52); // 10:14:40.000048621
LocalTime minusNanoSeconds = hourMinuteSecondNanoSecond.minusNanos(48621); // 10:15:32
// 원하는 날짜 더하기
LocalDate yearMonthDay = LocalDate.of(2022,10,31);
LocalDate plusYear = yearMonthDay.plusYears(100); // 2122-10-31
LocalDate plusMonth = yearMonthDay.plusMonths(6); // 2023-04-30
LocalDate plusWeeks = yearMonthDay.plusWeeks(2); // 2022-11-14
LocalDate plusDays = yearMonthDay.plusDays(15); // 2022-11-15
// 원하는 날짜 빼기
LocalDate minusYear = yearMonthDay.minusYears(100); // 1922-10-31
LocalDate minusMonth = yearMonthDay.minusMonths(6); // 2022-04-30
LocalDate minusWeeks = yearMonthDay.minusWeeks(2); // 2022-10-17
LocalDate minusDays = yearMonthDay.minusDays(15); // 2022-10-16
# 날짜 전후 비교
compareTo를 사용하면 비교하는 날짜와 비교 대상 날짜가 같으면 0, 이전이면 -1, 이후면 1을 반환합니다.
isBefore, equals/isEqual, isAfter를 사용하면 비교하는 날짜와 비교 대상 날짜
isBefore : 이전이면 true, 같거나 이후면 false
equals/isEqual : 같으면 true, 이전이나 이후면 false
isAfter : 이후면 true, 같거나 이후면 false
모든 필드가 일치해야하는 equals()와 달리 isEqual()은 오직 날짜만 비교합니다.
// 시간 전후관계 비교
LocalTime time1 = LocalTime.of(10, 15, 32, 48621);
LocalTime time2 = LocalTime.of(10, 25, 18, 78521);
LocalTime time3 = LocalTime.of(9, 30, 59, 48923);
// compareTo로 비교하는 시간 전후관계 비교
int beforeTime = time1.compareTo(time2); // -1
int sameTime = time1.compareTo(time1); // 0
int afterTime = time1.compareTo(time3); // 1
// isBefore, isEqual, isAfter로 시간 전후관계 비교
boolean isBeforeTime = time1.isBefore(time2); // true
boolean isEqualTime = time1.equals(time1); // true
boolean isAfterTime = time1.isAfter(time3); // true
// 날짜 전후관계 비교
LocalDate date1 = LocalDate.of(2022,10,31);
LocalDate date2 = LocalDate.of(2025,05,25);
LocalDate date3 = LocalDate.of(2000,11,11);
// compareTo로 비교하는 날짜 전후관계 비교
int beforeDate = date1.compareTo(date2); // -1
int sameDate = date1.compareTo(date1); // 0
int afterDate = date1.compareTo(date3); // 1
// isBefore, isEqual, isAfter로 비교하는 시간 전후관계 비교
boolean isBeforeDate = date1.isBefore(date2); // true
boolean isEqualDate = date1.isEqual(date1); // true
boolean isAfterDate = date1.isAfter(date3); // true
이렇게 LocalDate, LocalTime, LocalDateTime이 어떤 자료형이며 활용 방법에 대해서 알아봤습니다.
혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.
오늘도 Jindory 블로그에 방문해주셔서 감사합니다.
반응형
'개발 > Java' 카테고리의 다른 글
[JAVA] JVM 메모리 구조 (0) | 2023.12.13 |
---|---|
[Java] 컴퓨터가 실수를 표현하는 방법과 실수 연산시 주의사항(IEEE 754) (0) | 2023.12.12 |
[Java] Windows 환경에서 jdk버전 2개 이상 관리 (0) | 2022.09.26 |
[Java] Collection Framework(List,Set,Map) (0) | 2022.04.17 |
[Java] Java 접근제한자/public,protected,default,private (0) | 2022.04.15 |