ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] DateTimeFormatter로 LocalDateTime 포맷팅 하기
    Language/Java 2023. 7. 31. 23:10

    로드맵 플랫폼인 RoadMaker를 개발 중, 프론트엔드 팀원이 로드맵 생성 일자를 포맷팅 해달라는 요청을 했다.

    이전 포맷은 '2023-07-29T15:40:31.849326'와 같은 ISO-8601 포맷이었는데

    이는 너무 길어 UI가 예쁘게 나오지 않았고, 사용자가 읽기도 어려울 것 같았다.

     

    포맷팅 되지 않은 생성일자를 사용하는 UI

    LocalDateTime 객체를 원하는 형식으로 포맷팅하려면 'java.time.format.DateTimeFormatter' 클래스를 사용하면 된다.

    DateTimeFormatter 클래스의 기본 사용법은 다음과 같다.

    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    public class DateTimeFormatting {
    	public static void main(String[] args) {
            // LocalDateTime 객체
            LocalDateTime dateTime = LocalDateTime.now();
    
            // 원하는 포맷 지정
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy. MM. dd");
    
            // 포맷 변환
            String formattedDateTime = dateTime.format(formatter);
    
            // 출력
            System.out.println(formattedDateTime);  // "2023. 07. 29"
    	}
    }

     

    Roadmap entity를 RoadmapResponse로 변환하는 'of' 메서드에서

    DateTimeFormatting 클래스를 사용하여 날짜를 포맷팅 해주었다.

    package com.roadmaker.roadmap.dto;
    
    import com.roadmaker.member.dto.MemberResponse;
    import com.roadmaker.member.entity.Member;
    import com.roadmaker.roadmap.entity.roadmap.Roadmap;
    import lombok.*;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    @Getter
    @ToString
    @Builder
    @NoArgsConstructor(access = AccessLevel.PRIVATE)
    @AllArgsConstructor
    public class RoadmapResponse {
        private Long id;
        private String title;
        private String description;
        private String thumbnailUrl;
        private MemberResponse member;
        private String createdAt;
        private String updatedAt;
    
    	// 포맷팅 static method
        private static String formatDate(LocalDateTime dateTime) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy. M. dd.");
            return dateTime.format(formatter);
        }
    
        public static RoadmapDto of(Roadmap roadmap, Member member) {
            return RoadmapDto.builder()
                    .id(roadmap.getId())
                    .title(roadmap.getTitle())
                    .description(roadmap.getDescription())
                    .thumbnailUrl(roadmap.getThumbnailUrl())
                    // creatdAt과 updatedAt을 포맷팅
                    .createdAt(formatDate(roadmap.getCreatedAt()))
                    .updatedAt(formatDate(roadmap.getUpdatedAt()))
                    .member(MemberResponse.of(member))
                    .build();
        }
    }

     

    이후 프론트엔드에서 로드맵을 요청할 때, 포맷팅 된 createdAt과 updatedAt을 반환할 수 있게 하였다.

     

    포맷팅 된 응답 json
    포맷팅이 적용된 생성일을 출력하는 UI

     

Designed by Tistory.