LocalDate, LocalDateTime 등의 날짜/시간 객체에 년, 월, 일, 시, 분, 초를 더하고 빼는 방법에 대해서 알아보겠습니다.

1. LocalDateTime의 날짜/시간 계산

날짜/시간 더하기

LocalDateTime는 아래와 같은 메소드를 제공하며, 각각 인자로 전달된 월, 일, 시간, 분, 초 값을 LocalDateTime 객체에 더합니다.

  • plusYears() : 년 더하기
  • plusMonths() : 월 더하기
  • plusDays() : 일 더하기
  • plusHours() : 시간 더하기
  • plusMinutes() : 분 더하기
  • plusSeconds() : 초 더하기
import java.time.LocalDateTime;

public class Example {

    public static void main(String[] args) {

        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("Current Date and Time: " + currentDateTime);

        LocalDateTime newDateTime = currentDateTime.plusYears(1)
                .plusMonths(1)
                .plusDays(2)
                .plusHours(3)
                .plusMinutes(15)
                .plusSeconds(30);

        System.out.println("New Date and Time: " + newDateTime);
    }
}

Output:

Current Date and Time: 2023-08-27T20:26:04.854456075
New Date and Time: 2024-09-29T23:41:34.854456075

날짜/시간 빼기

LocalDateTime는 아래와 같은 메소드를 제공하며, 각각 인자로 전달된 월, 일, 시간, 분, 초 값을 LocalDateTime 객체에서 뺍니다.

  • minusYears() : 년 빼기
  • minusMonths() : 월 빼기
  • minusDays() : 일 빼기
  • minusHours() : 시간 빼기
  • minusMinutes() : 분 빼기
  • minusSeconds() : 초 빼기
import java.time.LocalDateTime;

public class Example {

    public static void main(String[] args) {

        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("Current Date and Time: " + currentDateTime);

        LocalDateTime newDateTime = currentDateTime.minusYears(1)
                .minusMonths(1)
                .minusDays(2)
                .minusHours(3)
                .minusMinutes(15)
                .minusSeconds(30);

        System.out.println("New Date and Time: " + newDateTime);
    }
}

Output:

Current Date and Time: 2023-08-27T20:31:32.292334672
New Date and Time: 2022-07-25T17:16:02.292334672

LocalDate와 LocalTime의 날짜/시간 계산

LocalDate와 LocalTime도 위에서 소개한 LocalDateTime과 동일한 메소드를 제공합니다.

단, LocalDate는 시간 정보가 없기 때문에 시간에 대한 메소드는 제공하지 않고, LocalTime은 날짜에 대한 메소드는 제공하지 않습니다.

아래 예제는 LocalDate의 날짜 빼기 예제인데, 동일한 메소드를 제공합니다.

import java.time.LocalDate;

public class Example {

    public static void main(String[] args) {

        LocalDate currentDate = LocalDate.now();
        System.out.println("Current Date: " + currentDate);

        LocalDate newDate = currentDate.minusYears(1)
                .minusMonths(1)
                .minusDays(2);

        System.out.println("New Date: " + newDate);
    }
}

Output:

Current Date: 2023-08-27
New Date: 2022-07-25

2. 두 LocalDateTime 객체의 더하기/빼기

두개의 LocalDateTime 객체 dateTime1dateTime2가 있을 때, 두 객체를 더하는 방법은 plus 메소드를 이용하여 dateTime1에 datetime2의 시간을 더하는 것입니다.

아래 예제는 두 LocalDateTime 객체의 날짜와 시간을 모두 더합니다.

  • 만약 시간 정보만 더하고 싶다면, 날짜는 더하지 않고 시간만 더하시면 됩니다.
  • LocalDate, LocalTime도 동일한 방식으로 더하면 됩니다.
  • 빼기의 경우, minus 메소드를 이용하면 됩니다.
import java.time.LocalDateTime;

public class Example {

    public static void main(String[] args) {

        LocalDateTime dateTime1 = LocalDateTime.now();
        LocalDateTime dateTime2 = LocalDateTime.of(2023, 8, 31, 15, 30);

        LocalDateTime resultDateTime = dateTime1.plusYears(dateTime2.getYear())
                .plusMonths(dateTime2.getMonthValue())
                .plusDays(dateTime2.getDayOfMonth())
                .plusHours(dateTime2.getHour())
                .plusMinutes(dateTime2.getMinute())
                .plusSeconds(dateTime2.getSecond());

        System.out.println("DateTime 1: " + dateTime1);
        System.out.println("DateTime 2: " + dateTime2);
        System.out.println("Result DateTime: " + resultDateTime);
    }
}

Output:

DateTime 1: 2023-08-27T20:34:50.932347448
DateTime 2: 2023-08-31T15:30
Result DateTime: 4047-05-29T12:04:50.932347448