본문 바로가기

Android/Basic

[Android] Time to String 및 시간순으로 정렬하기

거창하게 Time to String 이라고 했지만... 그냥 방금, 몇분전, 몇시간전 나타내주는 거 구현하는 방법이다.



# 시간(long)을 String으로 만들어 줄 클래스 만들기.

package com.onedelay.mymovie.utils;

public class TimeString {
public static final int SEC = 60;
public static final int MIN = 60;
public static final int HOUR = 24;
public static final int DAY = 30;
public static final int MONTH = 12;

public static String formatTimeString(long regTime) {
long curTime = System.currentTimeMillis();
long diffTime = (curTime - regTime) / 1000;
String msg = null;

if (diffTime < TimeString.SEC) {
msg = "방금";
} else if ((diffTime /= TimeString.SEC) < TimeString.MIN) {
msg = diffTime + "분전";
} else if ((diffTime /= TimeString.MIN) < TimeString.HOUR) {
msg = (diffTime) + "시간전";
} else if ((diffTime /= TimeString.HOUR) < TimeString.DAY) {
msg = (diffTime) + "일전";
} else if ((diffTime /= TimeString.DAY) < TimeString.MONTH) {
msg = (diffTime) + "달전";
} else {
msg = (diffTime) + "년전";
}
return msg;
}
}

-> 사용법은 TimeString.formatTimeString(long time) 으로 String을 리턴받으면 된다. 

* 참고 : System.currentTimeMillis() 메소드를 사용하면 현재 시간을 long 으로 가져온다. (계산 기준은 특정 날짜부터 현재 시각까지 long 값으로 리턴하는 것 같다)


# 시간순으로 정렬하기 (ArrayList.sort(Comparator) 이용)

ArrayList<long> 으로 하면 되지만, 필자는 ReviewItem 속의 time 속성(마찬가지로 long)을 기준으로 정렬했다.

먼저 Comparator 클래스를 만들어주어야한다.

import java.util.Comparator;

public class TimeDescending implements Comparator<ReviewItem> {
@Override
public int compare(ReviewItem item, ReviewItem t1) {
return t1.getTime() <= item.getTime() ? -1 : 1;
}
}

compare 메소드를 override 해야하는데, 필자는 내림차순으로 구현했다.

오름차순으로 해야한다면 retrun 값 -1, 1을 바꿔주면 될 것이다.. (아마도)

https://msdn.microsoft.com/ko-kr/library/y2ky8xsk(v=vs.110).aspx

compare 메소드는 위 사이트를 보고 대충 이해했다. 


사용법은 아래와 같다.

reviewList.add(new ReviewItem(R.drawable.user1, "abc12**", System.currentTimeMillis()-2000000, 5, "웃긴 내용보다는 좀 더 진지한 영화.", "추천 1"));
reviewList.add(new ReviewItem(R.drawable.user1, "bu_t**", System.currentTimeMillis()-3000000, 3, "연기가 부족한 느낌이 드는 배우도 있지만 전체적으로 재밌다.", "추천 0"));
reviewList.add(new ReviewItem(R.drawable.user1, "em_r2**", System.currentTimeMillis()-4000000, 4, "말이 필요없어요.", "추천 0"));

reviewList.sort(new TimeDescending());



다른 사람이 이해하기에는 너무 대충 쓴 글이지만, 나를 위해 정리하는 글이므로 나만 이해할 수 있으면 될것 같아서 이정도만 쓰겠다.


Full source는 현재 부스트코스 프로젝트를 진행하고있어 올릴 수 없다.


# 참고한 블로그

http://milkissboy.tistory.com/31

http://codeman77.tistory.com/4

'Android > Basic' 카테고리의 다른 글

[Android] ViewPager + TitleStrip(타이틀스트립)  (0) 2018.07.01
[Android] ViewPager + Tab  (0) 2018.06.25
[Android] Action Bar  (0) 2018.05.27
[Android] startActivityForResult() 활용 예제  (0) 2018.05.18
[Android] Permission  (0) 2018.05.17