본문 바로가기
Today I Learned 2024. 6. 4.

(24.06.04)[8주차] Java에서의 LocalDate 포맷으로 파싱

Java Spring에 관하여서 학습하느라 간단히 지나갈 수 있었떤 JPA Auditing의 createdAt modifiedAt의 내용에 대해서 점검하면서 학습을 진행했다.

 

팀프로젝트가 시작되었기 때문에, 팀 프로젝트의 내용과 TIL 을 합쳐서 포스팅 할 것 

 


Java Spring Framework & Java 에서의 LocalDate 포맷

  • Java에서 Date 날짜 포맷을 다루고 있는데, Java의 정석에서 다른 부분을 더 심도있게 공부하느라 넘겼기 때문에, 이번에 살펴보면서 확인하고 학습하려고한다.

Spring Framework의 JPA Auditing에서의 LocalDate과 매핑

  • @Temporal을 통해 Java에서의 java,util.Calendar, java.util.Date, 과 매핑을 할 수 있음
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Timestamped {

    @CreatedDate
    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime createdAt;
}
  • @MappedSuperclass : createdAt, modifiedAt 처럼 추상 클래스에 선언한 멤버변수를 컬럼으로 인식
    • 이럴 경우 LocalDateTime 포맷을 사용할 수 있음
  • @EntityListeners(AuditingEntityListener.class) : Jpa Auditing기능을 사용할 수 있게 해줄 수 있는 Annotation

Java의 java.time 패키지

  • 기존의 java의 Date 와 Calendar의 단점을 해소하기 위한 JDK 1.8 부터 추가된 패키지
  • 가장 기본이 되는 클래스는 LocalDate, LocalTime, LocalDateTime

문자열을 시간으로 파싱

  • CODE KATA 등 코드 테스트에서 가장 많이 사용할 수 있는 부분
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.DayOfWeek;

class Solution {
    public String solution(int a, int b) {
        String date = String.format("2016-%02d-%02d", a, b);
        
        LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        
        DayOfWeek day = localDate.getDayOfWeek();
        String answer =day.toString().substring(0,3);
        
        return answer;
    }
}
  • static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter ) 형태
    • DateTimeFormatter의 ofPattern()  메서드를 통해서 LocatDate 타입의 형태로 파싱
      • 다른 코드에서도 많이 사용하는 형태와 유사
  • DayOfWeek 타입
    • getDayOfYear(), getDayofMonth() 등의 LocalDate의 메서드는 메서드 이름으로만 직접적으로 반환 타입과 그 기능을 알 수 있지만, getDayofWeek() 는 는 DayOfWeek 타입으로 반환
    • getDayOfWeek() 메서드를 통해서 해당 날짜에 해당하는 요일이 MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY의 DayOfWeek 타입으로 반환
      • String 타입이 아닌점 주의! enum의 개념
      • 따라서, 이어서 getValue()를 이어서 쓴다면, MONDAY는 1 부터 SUNDAY 7 까지로 얻을 수 있음

 

-> JPA에서도 사용되는 포맷이기 때문에 반드시 공부한 내용을 기억을 해놨다가 바로 사용을 할 수 있도록


기본적인 부분이지만, 이제 팀 프로젝트가 시작할 수 있기 때문에, 매번 확인하는 것보다 한번더 점검하고,

또 CODE KATA에도 동시에 나와서 한번더 점검을 할 수 있었다.