[JAVA] LocalDate, LocalDateTime, LocalTime

삼식이·2024년 3월 14일

참고자료: https://programminghints.com/2017/05/still-using-java-util-date-dont/

Date 객체가 사용되지 않는 이유

이전에는 java.util.Date 클래스를 사용했으나 다음과 같은 이유 때문에 더 이상 사용되지 않는다고 한다.

  • 시간대가 없다
  • 형식이 없다.
  • 달력 시스템이 없다.

물론, 아직 실행이 되긴한다! 하지만 Month는 0부터 시작하여 나온 값에 +1 처리를 해주어야 하고, year도 현재 year에서 1900을 뺀 값을 반환하기 때문에 나온 값에 1900을 더해야 현재 날짜가 나온다.

이러한 번거로움을 해결하고 JDK 코어에서 더 나은 지원을 제공하기 위해 이러한 문제가 없는 새로운 날짜 및 시간 API가 Java SE8 용으로 설계되었다.

LocalDate

LocalDate는 날짜를 반환하는 클래스이다.

  • now() 메소드는 현재의 날짜를 반환한다.
  • of() 메소드는 year, month, dayOfMonth의 값을 int 형으로 넣어주면 포맷팅하여 날짜를 반환한다.
  • parse() 메소드는 2007-12-03과 같은 텍스트 문자열에서 LocalDate의 인스턴스를 가져온다. 이때, 10 미만의 숫자의 경우 앞에 0을 붙여줘야 한다.

해당 클래스의 부가적인 기능이 궁금하다면 https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
이 문서를 참고하면 된다.

LocalTime

LocalTime은 시간을 반환하는 클래스이다.

  • of() 메소드는 hour, minutes, second를 인자로 넣어주면 포맷팅된 인스턴스를 반환한다.

LocalDateTime

LocalDate가 날짜 반환을 담당하는 클래스였다면 LocalDateTime 클래스는 시간까지 반환해주는 클래스이다.

  • now() 메소드는 현재의 날짜와 시각까지 반환한다.
  • of() 메소드는 year, month, dayOfMonth, hour, minutes, second를 인자로 넣어주면 포맷팅하여 인스턴스를 반환한다.

DateTimeFormatter

DateTimeFormatter 날짜를 포맷팅할 때 쓰는 클래스이다.

  • ofPattern() 메소드에 형식을 지정해주면 그에 맞게 현재 날짜가 들어간다. 보통 LocalDate와 함께 사용한다. (이때, m월이 아닌 M월로 적어야 오류가 나지 않는다.)

번외

그동안 프론트 개발을 해올 때, 백엔드분들께서 보내주시는 api 명세서에는 날짜를 보내야될 경우 매번 2024-03-11T11:11:11 와 같은 형식으로 보내주셨다.

그래서 프론트 딴에서 다시 한번 처리를 해서 시간을 제외한 날짜만 화면에 출력해야되는 번거로움이 있었다.

만약 백엔드 개발을 하시는 분께서 이 글을 보신다면 LocalDateTime이 아닌 LocalDate()를 이용하여 JSON 객체를 생성하여 값을 보내주는게 더 배려있는 방법일 것 같다!

또는 더 나아가 위와 같이 포맷팅함수를 거쳐 예쁘게 값을 보내주시면 프론트엔드 개발자 분들께서 개발하는데 번거로움이 훨씬 적을 것 같다는 생각을 했다.

0개의 댓글