본문 바로가기
Projects/청하-청년을 위한 커뮤니티 서비스

[청하] 9. 게시글 createDate 포멧 변경 (feat. DateTimeFormatter)

by Lpromotion 2024. 10. 8.

TimeFormatter 라는 유틸리티 클래스에서 게시글 생성시간에 대해 포맷팅 작업을 통해, 시간별로 다른 형식의 시간을 반환했다. Android 팀원의 요구사항으로 인해 "yyyy/MM/dd HH:mm:ss” 형식으로 반환하도록 수정하게 되었다. 이에 따라 클라이언트 측에서 시간 포맷팅 작업을 수행하기로 결정되었다.

 

1. TimeFormatter 유틸리티 수정

기존 코드

public class TimeFormatter {

    public static String timeFormat(LocalDateTime time) {
        LocalDateTime now = LocalDateTime.now();
        Duration duration = Duration.between(time, now);

        if(duration.getSeconds() < 60) {
            return duration.getSeconds() + "초 전";
        } else if(duration.toMinutes() < 60) {
            return duration.toMinutes() + "분 전";
        } else if(duration.toHours() < 24) {
            return duration.toHours() + "시간 전";
        } else if(duration.toDays() < 7) {
            return duration.toDays() + "일 전";
        } else {
            if (time.getYear() != now.getYear()) {
                return time.format(DateTimeFormatter.ofPattern("yyyy년 M월 d일"));
            } else {
                return time.format(DateTimeFormatter.ofPattern("M월 d일"));
            }
      
    }
}

시간의 경과에 따라 “초 전”, “분 전”, “시간 전”, “일 전”, "yyyy년 M월 d일", "M월 d일"로 시간을 반환했다.

 

수정 코드

public class TimeFormatter {

    public static String timeFormat(LocalDateTime time) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        return time.format(formatter);
    }
}

`DateTimeFormatter.ofPattern()` 를 사용해 모든 시간을 "yyyy/MM/dd HH:mm:ss" 형식으로 반환한다.

 

2. 서비스 수정

“게시글 상세조회”와 관련 로직에서 TimeFormatter 사용 부분을 변경했다.

 

기존 코드

@Transactional
public PostDetailResponseDto getPostDetail(Long userId, Long postId) {
    // ... (기존 코드 생략)

    String formatterDate = TimeFormatter.timeFormat(post.getCreateDate());

    PostDetailResponseDto postDetailResponseDto =
            PostDetailResponseDto.builder()
                    // ... (다른 필드 생략)
                    .createDate(formatterDate) // 기존
                    // ... (다른 필드 생략)
                    .build();

    return postDetailResponseDto;
}

기존에는 `TimeFormatter` 를 사용해 포맷팅된 날짜를 별도의 변수에 저장한 후 DTO에 설정했다.

 

수정 코드

@Transactional
public PostDetailResponseDto getPostDetail(Long userId, Long postId) {
    // ... (기존 코드 생략)
    
    PostDetailResponseDto postDetailResponseDto =
            PostDetailResponseDto.builder()
                    // ... (다른 필드 생략)
                    .createDate(TimeFormatter.timeFormat(post.getCreateDate())) // 변경
                    // ... (다른 필드 생략)
                    .build();

    return postDetailResponseDto;
}

`TimeFormatter.timeFormat()` 을 직접 DTO 빌드 내에서 호출하여 사용한다. 추가적인 변수를 사용하지 않았다.

반응형

댓글