Java Date - LocalDateTime 날짜와 시간 다루기

Local용 날짜와 시간을 다뤄보도록 한다.

자바 Local 날짜와 시간 클래스

  • LocalDate
    • 날짜만 표현할 때 사용.
    • 예) 2025-06-20
  • LocalTime
    • 시간만 표현할 때 사용
    • 예) 08:20:40:221
  • LocalDateTime
    • LocalDate, LocalTime 합한 것과 같다.
    • 2025-06-20ㅆ08:20:40:221

클래스 앞의 Local은 세계 시간을 다루지 않고 특정 지역 위치의 날짜만 다룬다.
개발 대상도 세계 시간을 다루지 않는다면 언급한 클래스들을 사용한다

세계 시간대가 필요 없는 서비스

  • 국내의 서비스 제공
  • 본인의 생일 또는 기념일에 사용

LocalDate 라이브러리

LocalDate 부터 다뤄보도록 한다. 이 클래스는 날짜만 다룬다.

now

LocalDate now = LocalDate.now();
System.out.println("오늘 날짜: " + now);

오늘 날짜: 2025-06-20


of

LocalDate of = LocalDate.of(2020,1,1);
System.out.println("날짜 지정: " + of);

날짜 지정: 2020-01-01


plusDays

LocalDate of = LocalDate.of(2020,1,1);
System.out.println("날짜 지정: " + of);

LocalDate ofPlusDay = of.plusDays(10);
System.out.println("날짜 지정 (+10): " + of); // 불변
System.out.println("날짜 지정 (+10): " + ofPlusDay); // 값 할당

날짜 지정: 2020-01-01
날짜 지정 (+10): 2020-01-01
날짜 지정 (+10): 2020-01-11

LocalDate 정리

생성

  • now() 현재 시간 기준으로 생성함
  • of(...) 특정 날짜 기준으로 년 월 일 입력해서 생성함.

계산

  • plusDays(...) 특정 일을 더하기
  • plusMonths(...) 특정 월을 더하기
  • plusYears(...) 특정 년을 더하기

주의점

  • 모든 날짜가 불변임
  • 불변이므로 변경이 필요한 메소드는 새 객체로 생성해서 반환 값을 받아야 한다.

LocalTime 라이브러리

시간을 다루는 클래스다.

now

LocalTime now = LocalTime.now();
System.out.println("현재 시간: " + now);

현재 시간: 16:31:16.089335700


of

LocalTime of = LocalTime.of(12,30,45,221122);
System.out.println("현재 시간 지정: " + of);

12:30:45.000221122

LocalTime of = LocalTime.of(12,30);
System.out.println("현재 시간 지정: " + of);

12:30


plusSeconds

LocalTime of = LocalTime.of(12,30);
System.out.println("현재 시간 = " + of);
LocalTime ss = of.plusSeconds(10);
System.out.println("현재 시간 (+00:00:10) = " + ss);

현재 시간 = 12:30
현재 시간 (+00:00:10) = 12:30:10

생성

  • now() 현재 시간 기준으로 생성함
  • of(...) 특정 시간 기준으로 시 분 초 나노 입력해서 생성함.

계산

  • plus​Seconds(...) 초를 더한다. 불변이기에 새 객체로 반환해야한다.

LocalDateTime 클래스

구조부터 살펴보자.

public final class LocalDateTime ... {
    ...
    private final LocalDate date;
    private final LocalTime time;
    ...
}

보다시피 LocalDate 클래스와 LocalTime 클래스를 같이 활용해서 LocalDateTime 으로 활용하고 있다.

now

LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);

현재 날짜와 시간: 2025-06-20T16:55:02.666725300


of

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

지정된 날짜와 시간: 2019-12-12T23:59:59

Month 인자는 숫자 대신 정해진 열거된 Enum 사용해도 된다.


toLocalDate

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

LocalDate localDate = of.toLocalDate();
System.out.println("날짜 표시: " + localDate);

지정된 날짜와 시간: 2019-12-12T23:59:59
날짜 표시: 2019-12-12


toLocalTime

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

LocalTime localTime = of.toLocalTime();
System.out.println("시간 표시: " + localTime);

지정된 날짜와 시간: 2019-12-12T23:59:59
시간 표시: 23:59:59


of(LocalDate date, localTime time)

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

LocalTime localTime = of.toLocalTime();
System.out.println("시간 표시: " + localTime);

LocalDate localDate = of.toLocalDate();
System.out.println("날짜 표시: " + localDate);

LocalDateTime dt = LocalDateTime.of(localDate, localTime);
System.out.println("날짜와 시간 표시: " + dt);

지정된 날짜와 시간: 2019-12-12T23:59:59
시간 표시: 23:59:59
날짜 표시: 2019-12-12
날짜와 시간 표시: 2019-12-12T23:59:59


plusDays

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

LocalDateTime plusDays100 = of.plusDays(100);
System.out.println("날짜와 시간 표시: " + plusDays100);

지정된 날짜와 시간: 2019-12-12T23:59:59
날짜와 시간 표시: 2020-03-21T23:59:59


plusYears

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("현재 날짜와 시간: " + of);

LocalDateTime plusY2 = of.plusYears(2);
System.out.println("날짜와 시간 표시(+Y2): " + plusY2);

지정된 날짜와 시간: 2019-12-12T23:59:59
날짜와 시간 표시 (+Y2): 2021-12-12T23:59:59


isBefore - 비교

LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

System.out.println("현재 시간이 지정된 날짜보다 이전인가요? " + now.isBefore(of));

현재 날짜와 시간: 2025-06-20T17:08:08.682632600
지정된 날짜와 시간: 2019-12-12T23:59:59
현재 시간이 지정된 날짜보다 이전인가요? false

isBefore메소드는 인자로 들어온 지정된 날짜가 현재보다 이전 날짜인지 묻는 것이다. 아니므로 false 값 반환

  • now 는 2025년 현재 날짜이다.
  • now 의 isBefore 메소드를 사용하여 인자로 들어온 of 인스턴스와 날짜 비교하기
  • of(2019) 인스턴스는 now(2025) 인스턴스의 미래의 일이다.

isAfter - 비교

LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

System.out.println("현재 시간이 지정된 날짜보다 이후인가요? " + now.isAfter(of));

현재 날짜와 시간: 2025-06-20T17:24:48.218491700
지정된 날짜와 시간: 2019-12-12T23:59:59
현재 시간이 지정된 날짜보다 이후인가요? true


isEquals - 비교

LocalDateTime now = LocalDateTime.now();
System.out.println("현재 날짜와 시간: " + now);

LocalDateTime of = LocalDateTime.of(2019, Month.DECEMBER, 12, 23, 59, 59);
System.out.println("지정된 날짜와 시간: " + of);

System.out.println("현재 시간이 지정된 날짜보다 같은가? " + now.isEqual(of));

현재 날짜와 시간: 2025-06-20T17:25:55.136497900
지정된 날짜와 시간: 2019-12-12T23:59:59
현재 시간이 지정된 날짜보다 같은가? false

euqals, isEquals 둘다 사용 할 수 있는데 차이점이 있다.

equals, isEquals 차이

  • isEquals
    • 단순하게 비교해서 시간이 같으면 true를 반환한다. 타임존이 다른 경우 시간적으로 같으면 true를 반환한다. 시간을 계산해서 비교해준다는 것이다.
    • Seoul +09 는 UTC +0시 와 같으므로 비교할 때 true 반환한다.
  • euqals
    • 객체 타입과 타임존의 내부 데이터가 구성요소가 같으면 true 반환
    • Seoul +09 는 UTC +0시와 같으므로 비교할 때 false 반환한다.