본문 바로가기

Java

Java에서 날짜와 시간을 계산하는 쉽고 강력한 방법. LocalDateTime API 총 정리!

LocalDateTime API 개발 가이드, Calendar 보다 훨씬 편하고 강력하다!

이번 포스트에서는 Java의 LocalDateTime API에 대해 살펴보겠습니다. 날짜와 시간은 이벤트 스케줄링, 마감 시간 추적, 기간 계산 등 많은 애플리케이션에서 중요한 요소입니다. 날짜와 시간을 적절하게 처리하면 정확한 결과를 얻을 수 있으며, 이는 사용자 만족도와 신뢰할 수 있는 애플리케이션 성능에 필수적입니다.

Java 8에서 java.time 패키지의 일부로 도입된 LocalDateTime API는 개발자가 날짜와 시간을 처리하는 방식을 단순화하고 개선하도록 설계되었습니다. 이 API는 이전의 java.util.Date와 java.util.Calendar 클래스보다 직관적이고 유연하며 효율적인 접근 방식을 제공합니다. LocalDateTime API를 사용하면 코드를 더 쉽게 읽고 유지할 수 있습니다.

이 가이드에서는 살펴볼 사항들입니다.

  • LocalDateTime 클래스의 기본 사항
  • LocalDateTime 클래스로 날짜와 시간을 조작하고 비교하는 방법
  • LocalDateTime를 사용하여 날짜를 포매팅하고 파싱하는 방법
  • LocalDate와 LocalTime 사용하는 방법

LocalDateTime 의 기본 사항

LocalDateTime 클래스는 날짜와 시간을 표현하는 데 사용되는 불변(immutable) 클래스입니다. 이 클래스는 날짜와 시간 정보를 함께 저장하며, 시간대 정보는 포함하지 않습니다. LocalDateTime API는 개발자에게 직관적이고 편리한 방법으로 날짜와 시간을 처리할 수 있는 다양한 메서드를 제공합니다. 다음은 LocalDateTime 인스턴스를 생성하는 데 사용할 수 있는 방법입니다.

now() 메서드 사용하기

현재 날짜와 시간을 나타내는 LocalDateTime 인스턴스를 생성하려면 now() 메서드를 사용할 수 있습니다.

LocalDateTime currentTime = LocalDateTime.now();

of() 메서드 사용하기

특정 날짜와 시간을 지정하여 LocalDateTime 인스턴스를 생성하려면 of() 메서드를 사용합니다. 이 메서드에는 년, 월, 일, 시간, 분, 초, 나노초를 인수로 전달할 수 있습니다.

LocalDateTime dateTime = LocalDateTime.of(2023, Month.APRIL, 10, 15, 30, 45);

문자열을 LocalDateTime 인스턴스로 생성하기

문자열로부터 LocalDateTime 인스턴스를 생성하려면, 해당 문자열의 날짜와 시간 형식과 일치하는 DateTimeFormatter를 사용하여 parse() 메서드를 호출해야 합니다. 예를 들어, 표준 ISO 형식의 문자열을 LocalDateTime 인스턴스로 변환하려면 다음과 같이 작성할 수 있습니다.

String dateTimeString = "2023-04-10T15:30:45";
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);

이러한 방법을 사용하여 다양한 날짜와 시간 정보를 포함하는 LocalDateTime 인스턴스를 생성할 수 있습니다. 이 클래스의 다른 메서드를 사용하여 날짜와 시간을 처리하는 방법을 살펴보겠습니다.

LocalDateTime으로 날짜와 시간 조작하기

LocalDateTime 인스턴스에서 시간 단위를 더하거나 빼려면 다음 메서드를 사용할 수 있습니다.

plus()와 minus() 메서드 사용하기

plus() 및 minus() 메서드를 사용하여 날짜와 시간에 시간 단위를 더하거나 뺄 수 있습니다. 예를 들어, 일주일을 더하거나 빼고 싶다면 다음과 같이 작성할 수 있습니다.

LocalDateTime now = LocalDateTime.now();
LocalDateTime oneWeekLater = now.plus(1, ChronoUnit.WEEKS);
LocalDateTime oneWeekEarlier = now.minus(1, ChronoUnit.WEEKS);

특정 요소 조정을 위해 with() 메서드 사용하기

특정 요소를 조정하려면 with() 메서드를 사용할 수 있습니다. 예를 들어, LocalDateTime 인스턴스의 시간을 특정 값으로 설정하려면 다음과 같이 작성할 수 있습니다.

LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime adjustedTime = currentTime.withHour(12).withMinute(0).withSecond(0);

비교를 위 isBefore(), isAfter(), isEqual() 메서드 사용하기

두 LocalDateTime 인스턴스를 비교하여 하나가 다른 것보다 이전, 이후 또는 동일한지 확인할 수 있습니다.

LocalDateTime dateTime1 = LocalDateTime.of(2023, Month.APRIL, 10, 12, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2023, Month.APRIL, 11, 12, 0);

boolean isBefore = dateTime1.isBefore(dateTime2); // true
boolean isAfter = dateTime1.isAfter(dateTime2); // false
boolean isEqual = dateTime1.isEqual(dateTime2); // false

절삭을 위한 truncatedTo() 메서드 사용하기

LocalDateTime 인스턴스를 특정 시간 단위로 절삭하려면 truncatedTo() 메서드를 사용합니다. 예를 들어, 분 단위로 절삭하려면 다음과 같이 작성할 수 있습니다.

LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime truncatedToMinute = currentTime.truncatedTo(ChronoUnit.MINUTES);

반올림을 위한 with() 메서드 사용하기

LocalDateTime 인스턴스를 특정 시간 단위로 반올림하려면 with() 메서드와 TemporalAdjusters를 사용합니다. 예를 들어, 가장 가까운 분으로 반올림하려면 다음과 같이 작성할 수 있습니다. 이 코드 예제에서는 with() 메서드와 TemporalAdjusters.rounding()을 사용하여 현재 시간을 가장 가까운 분으로 반올림합니다. RoundingMode.HALF_UP은 가장 가까운 값으로 반올림하는 방식을 지정합니다. (하지만, 저와 같은 경우 절삭이나 반올림 기능은 거의 사용할 기회가 없었습니다.😊)

LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime roundedToNearestMinute = currentTime.with(TemporalAdjusters.rounding(ChronoUnit.MINUTES, RoundingMode.HALF_UP));

이제 이러한 메서드를 사용하여 LocalDateTime 인스턴스를 다양한 방식으로 조작하고 비교할 수 있습니다. 다음으로 포맷팅 및 구문 분석 방법을 살펴보겠습니다.

LocalDateTime 인스턴스 포맷팅 및 파싱

DateTimeFormatter 소개

DateTimeFormatter는 날짜 및 시간을 문자열로 변환하거나 문자열에서 날짜 및 시간을 구문 분석하는 데 사용되는 클래스입니다. 이 클래스는 java.time.format 패키지에 포함되어 있으며, 다양한 포맷팅 스타일과 사용자 정의 포맷을 지원합니다.

미리 정의된 포맷터

DateTimeFormatter 클래스는 일반적인 날짜 및 시간 형식에 대한 미리 정의된 포맷터를 제공합니다. 예를 들어, 다음과 같은 미리 정의된 포맷터를 사용할 수 있습니다. 이러한 포맷터는 다양한 상황에서 사용할 수 있는 일반적인 날짜 및 시간 형식을 제공합니다.

  • DateTimeFormatter.ISO_LOCAL_DATE_TIME
  • DateTimeFormatter.ISO_DATE_TIME
  • DateTimeFormatter.RFC_1123_DATE_TIME
  • DateTimeFormatter.BASIC_ISO_DATE

사용자 정의 포맷터

사용자 정의 날짜 및 시간 형식을 만들려면, DateTimeFormatter의 ofPattern() 메서드를 사용하여 패턴 문자열을 지정합니다. 패턴 문자열에는 날짜 및 시간 구성 요소를 나타내는 문자가 포함되어 있습니다.

DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH:mm:ss");
LocalDateTime currentTime = LocalDateTime.now();
String formattedDateTime = currentTime.format(customFormatter);

문자열을 파싱하여 LocalDateTime 인스턴스 만들기

문자열을 LocalDateTime 인스턴스로 파싱하려면, 해당 문자열의 날짜와 시간 형식과 일치하는 DateTimeFormatter를 사용하여 parse() 메서드를 호출해야 합니다. 예를 들어, 사용자 정의 포맷을 사용하여 문자열을 LocalDateTime 인스턴스로 변환하려면 다음과 같이 작성할 수 있습니다.

String dateTimeString = "2023년 04월 10일 15:30:45";
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH:mm:ss");
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, customFormatter);

이제 DateTimeFormatter를 사용하여 LocalDateTime 인스턴스를 포맷팅하고 파싱하는 방법을 확인했습니다. 이 기술을 사용하여 애플리케이션에서 날짜 및 시간을 표시하고 처리할 수 있습니다.

LocalDate와 LocalTime 사용하기

LocalDate와 LocalTime 클래스 소개

LocalDate와 LocalTime은 java.time 패키지에 포함된 클래스로, 각각 날짜와 시간 정보를 나타냅니다. LocalDate 클래스는 년, 월, 일 정보를 저장하며, LocalTime 클래스는 시, 분, 초, 나노초 정보를 저장합니다. 이러한 클래스는 시간대 정보 없이 날짜 및 시간 정보를 처리하는 데 사용되며, 이를 LocalDateTime 클래스와 함께 사용하여 더욱 유연하게 작업할 수 있습니다.

LocalDate와 LocalTime 인스턴스 생성 및 조작하기

LocalDate와 LocalTime 인스턴스를 생성하는 방법은 LocalDateTime 인스턴스를 생성하는 방법과 유사합니다. 각 클래스의 now(), of(), parse() 메서드를 사용하여 인스턴스를 생성할 수 있습니다. 이러한 인스턴스를 조작하려면 plus(), minus(), with() 등의 메서드를 사용할 수 있습니다.

예를 들어, 오늘의 날짜와 현재 시간을 구하는 방법은 다음과 같습니다.

LocalDate today = LocalDate.now();
LocalTime currentTime = LocalTime.now();

또한, plus() 및 minus() 메서드를 사용하여 날짜와 시간을 조작할 수 있습니다.

LocalDate tomorrow = today.plusDays(1);
LocalTime oneHourLater = currentTime.plusHours(1);

LocalDate와 LocalTime 인스턴스 결합하기

LocalDate와 LocalTime 인스턴스를 결합하여 LocalDateTime 인스턴스를 생성할 수 있습니다. 이를 위해 LocalDate 클래스의 atTime() 메서드와 LocalTime 클래스의 atDate() 메서드를 사용할 수 있습니다.
예를 들어, 오늘의 날짜와 특정 시간을 결합하여 LocalDateTime 인스턴스를 생성하는 방법은 다음과 같습니다.

LocalDate today = LocalDate.now();
LocalTime specificTime = LocalTime.of(15, 30, 45);
LocalDateTime dateTime = today.atTime(specificTime);

반대로, 특정 날짜와 현재 시간을 결합하여 LocalDateTime 인스턴스를 생성할 수도 있습니다.

LocalDate specificDate = LocalDate.of(2023, Month.APRIL, 10);
LocalTime currentTime = LocalTime.now();
LocalDateTime dateTime = currentTime.atDate(specificDate);

이제 LocalDate와 LocalTime 클래스를 사용하여 날짜와 시간 정보를 독립적으로 처리하고 결합하는 방법을 알게 되었습니다. 이를 활용하여 애플리케이션에서 더욱 다양한 날짜 및 시간 관련 작업을 수행할 수 있습니다.

지금까지 LocalDateTime를 알아봤습니다!

이 가이드에서는 Java의 LocalDateTime API에 대해 소개하고, 이를 사용하여 날짜와 시간을 처리하는 방법을 살펴보았습니다. LocalDateTime, LocalDate, LocalTime 클래스를 사용하여 날짜와 시간 인스턴스를 생성, 조작하고 포맷팅하는 방법을 알아보았으며, 이러한 인스턴스를 비교하고 결합하는 방법도 살펴봤습니다. 읽어주셔서 감사합니다.
 
마지막으로, 날짜와 시간 처리를 더욱 완벽하게 이해하려면 다음과 같은 추가 학습 자료를 참고할 수 있습니다.