Study/java

[Java] LocalDate, LocalDateTime 날짜, 시간 더하기 및 빼기

 

자바의 LocalDate와 LocalDateTime을 사용해서 날짜 및 시간을 더하거나 뺀 결과 값을 구하는 방법에 대해 설명드리겠습니다.

 

날짜 및 시간 더하기

plus 메소드를 사용하면 날짜나 시간을 편리하게 더할 수 있습니다.

LocalDate nowDate = LocalDate.now();
LocalDate plusOneDay = nowDate.plusDays(1);
LocalDate plusOneWeek = nowDate.plusWeeks(1);
LocalDate plusOneMonth = nowDate.plusMonths(1);
LocalDate plusOneYear = nowDate.plusYears(1);
LocalDate plusThreeMonths = nowDate.plus(3, ChronoUnit.MONTHS);

LocalDateTime nowDateTime = LocalDateTime.now();
LocalDateTime plusOneHour = nowDateTime.plusHours(1);
LocalDateTime plusTenMinutes = nowDateTime.plusMinutes(10);
LocalDateTime plusFiveSeconds = nowDateTime.plusSeconds(5);
LocalDateTime plusOneHundredNanos = nowDateTime.plusNanos(100);
LocalDateTime plusOneMinute = nowDateTime.plus(1, ChronoUnit.MINUTES);

LocalDate, LocalDateTime plus 메소드 사용 결과
LocalDate, LocalDateTime plus 메소드 사용 결과

 

사용 방법은 더하고자 하는 시간 단위에 맞는 메소드를 사용하면 됩니다.

일자를 더하고 싶으면 plusDays를 사용하고, 초를 더하고 싶으면 plusSeconds를 사용하면 됩니다.

 

뒤에 시간 단위가 붙지 않은 단순 plus 메소드는 더하고자 하는 값과 시간 단위를 같이 지정합니다.

plus 메소드는 2가지가 있는데, 위의 코드에는 plus(long amountToAdd, TemporalUnit unit) 메소드가 사용되었습니다.

 

당연하지만, LocalDate에는 시, 분, 초와 같은 시간 데이터는 더할 수 없습니다.

plus 메소드를 사용하여 강제로 시간 단위를 더하려고 하는 경우 오류가 발생합니다.

LocalDate plusOneHourDate = nowDate.plus(1, ChronoUnit.HOURS);
System.out.println("plusOneHourDate = " + plusOneHourDate);

LocalDate에 시간 단위를 더하려고 하는 경우에 오류 발생
LocalDate에 시간 단위를 더하려고 하는 경우에 오류 발생

 

 

날짜 및 시간 빼기

더하기는 plus 메소드를 사용했듯이, 시간을 빼고자 할 때는 minus 메소드를 사용하면 됩니다.

LocalDate nowDate = LocalDate.now();
LocalDate minusOneDay = nowDate.minusDays(1);
LocalDate minusTwoWeeks = nowDate.minusWeeks(2);
LocalDate minusThreeMonths = nowDate.minusMonths(3);
LocalDate minusFourYears = nowDate.minusYears(4);
LocalDate minusPeriod = nowDate.minus(Period.of(1, 2, 3));

LocalDateTime nowDateTime = LocalDateTime.now();
LocalDateTime minusOneHour = nowDateTime.minusHours(1);
LocalDateTime minusFiveMinutes = nowDateTime.minusMinutes(5);
LocalDateTime minusTenSeconds = nowDateTime.minusSeconds(10);
LocalDateTime minusTenNanos = nowDateTime.minusNanos(10);
LocalDateTime minusDuration = nowDateTime.minus(Duration.ofHours(3));

LocalDate, LocalDateTime minus 메소드 사용 결과
LocalDate, LocalDateTime minus 메소드 사용 결과

사용방법은 plus와 동일합니다.

 

뒤의 시간 단위가 붙지 않는 minus 메소드는 plus 메소드에서처럼 값과 단위를 지정해 줄 수도 있지만 

minus(TemporalAmount amountToSubtract) 메소드를 사용해서 기간을 지정할 수도 있습니다.

 

위의 코드에서는 TemporalAmount를 구현한 Period와 Duration 클래스를 사용하였습니다.

Period.of(1, 2, 3)을 사용하여 주어진 시간에서 1년, 2달, 3일을 뺐습니다.

Duration에는 시분초를 한꺼번에 지정하는 메소드가 없어서 ofHours 메소드를 사용하여 3시간을 뺐습니다.

 

LocalDate와 LocalDateTime과 같은 클래스는 자바에서 날짜를 쉽게 다룰 수 있도록 구현된 클래스입니다.

잘 사용하면 많은 도움이 됩니다.

 

 

읽으면 좋은 글

[Java] 현재 날짜와 시간 구하기 및 형식 지정, 문자열 변환