[221024] LocalDateTime 몇분전 몇시간전 형식 변환

Younseo·2022년 10월 24일
1

TIL Study

목록 보기
5/27

LocalDateTime

1. LocalDate

날짜정보만 출력

//현재 날짜 정보를 저장한 LocalDate 객체 리턴
LocalDate currentDate = LocalDate.now();
// result : 2022-10-25

// 파라미터로 주어진 날짜 정보를 저장한 LocalDate 객체 리턴
LocalDate targetDate = LocalDate.of(2023,10,16);
 //결과 : 2023-10-16

2. LocalTime

시간 정보만 출력

// 로컬의 현재 시간 정보를 저장한 LocalDate 객체 리턴
LocalTime currentTime = LocalTime.now();   
// 결과 : 18:34:22

// 파라미터로 주어진 시간 정보를 저장한 LocalTime 객체 리턴
LocalTime targetTime = LocalTime.of(01,17,44,22); 
// 끝에 4번째 매개변수는 nanoSecond이고 선택 값(굳이 쓰지 않아도 됨)
// 결과 : 01:17:44.0000022

3. LocalDateTime

날짜, 시간 정보 모두 출력

// 로컬의 현재 날짜와 시간 정보
LocalDateTime currentDateTime = LocalDateTime.now();    
// 결과 : 2022-10-25T01:47:58:22.000003323

LocalDateTime targetDateTime = LocalDateTime.of(2022, 11, 12, 12, 32,22,3333);
// 여기도 second,nanoSecond은 선택
// 결과 : 2022-11-12T12:32:22.000003333

LocalDateTime 몇분전 형식 변환

LocalDateTime을 몇분 전, 몇시간 전 이렇게 형식 변환하는 함수를 만들었다.
Chrono.java

public class Chrono {

    public static long dPlus(LocalDateTime dayBefore) {
        return ChronoUnit.DAYS.between(dayBefore, LocalDateTime.now());
    }

    public static long dMinus(LocalDateTime dayAfter) {
        return ChronoUnit.DAYS.between(dayAfter, LocalDateTime.now());
    }

    public static String timesAgo(LocalDateTime dayBefore) {
        long gap = ChronoUnit.MINUTES.between(dayBefore, LocalDateTime.now());
        String word;
        if (gap == 0){
            word = "방금 전";
        }else if (gap < 60) {
            word = gap + "분 전";
        }else if (gap < 60 * 24){
            word = (gap/60) + "시간 전";
        }else if (gap < 60 * 24 * 10) {
            word = (gap/60/24) + "일 전";
        } else {
            word = dayBefore.format(DateTimeFormatter.ofPattern("MM월 dd일"));
        }
        return word;
    }

    public static String customForm(LocalDateTime date) {
        return date.format(DateTimeFormatter.ofPattern("MM월 dd일"));
    }
}

사용 예
PostResponseDto

@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class PostResponseDto {
    private Long postId;
    private String accountName;
    private String title;
    private String contents;
    private String tag;
    private List<CommentResponseDto> comments;
    private int postLike;
    private String createdAt;
    private String modifiedAt;
    private String img;


    public PostResponseDto(Post post, List<CommentResponseDto> commentResponseDtos) {
        this.postId = post.getPostId();
        this.accountName = post.getAccount().getAccountName();
        this.title = post.getTitle();
        this.contents = post.getContents();
        this.tag = post.getTag();
        this.comments = commentResponseDtos;
        this.postLike = post.getPostLikeCount();
        this.createdAt = Chrono.timesAgo(post.getCreatedAt());
        this.modifiedAt = Chrono.timesAgo(post.getModifiedAt());
        this.img = post.getImg();
    }
}

createdAt, modifiedAt 시간을 표기할 때 timesAgo 함수를 사용하여 표현하였다.

방금 작성한 글은 방금전, 1분 전에 작성한 글은 1분 전 이렇게 표기된다.

4개의 댓글

comment-user-thumbnail
2022년 10월 25일

누가 만들었는지 깔끔하네요!

1개의 답글