개발/Java

[Java] LocalDate,LocalTime,LocalDateTime 활용하기

Jindory 2022. 11. 2. 08:15
반응형

안녕하세요. 개발자 Jindory입니다.

오늘은 LocalDate, LocalTime, LocalDateTime이 어떤 자료형이며 활용 방법에 대해서 작성해보고자 합니다.

 

# 글 작성 이유

날짜 데이터를 만들기 위해서 LocalDateTime을 자주 사용하는데, 날짜를 생성, 날짜 더하기 빼기 등 활용방법에 대해서 숙지하지 못하고 있는것 같아서 정리해보고자 합니다.


# 날짜 시간 Class 정의 및 초기화

# LocalTime

  • 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

# LocalDate

  • 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

  • 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 블로그에 방문해주셔서 감사합니다.

반응형