1. 먼저 뷰를 가져옵니다.

레이아웃과 java파일을 연결해줍니다. PhotoViewAttacher는 나중에 다시 설명하겠습니다.

    private void configViews() {
        mImage = (ImageView) findViewById(R.id.iv_photo_detail);
        mPhotoViewAttacher = new PhotoViewAttacher(mImage);
        mText = (TextView) findViewById(R.id.tv_text_detail);
        mAuthor = (TextView) findViewById(R.id.tv_author_detail);
        mTime = (TextView) findViewById(R.id.tv_time_detail);
    }
cs


2. 시간의 단위를 정합니다.

static final int 로 개별 변수를 지정했고 TIME_MAXIMUM이라는 모델로 묶었습니다.

    private static class TIME_MAX{
        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;
    }
cs


3. 모듈을 import합니다.


import java.text.ParseException;
import java.util.Date;
import java.util.TimeZone;
cs


4. 시간 계산 함수를 만듭니다.

case문을 사용하는 것보다 if문을 사용하는 것이 가독성이 좋을 것 같습니다.
위에서 지정한 SEC 값보다 변화된 시간이 작으면 just now를 반환합니다. 그렇진 않지만 MIN보다 SEC가 작다면 minutes ago를 반환합니다. 이런식으로 이어지다가 결국 years ago를 반환하게 됩니다. 여기서 문제는 1년도 years ago라고 반환하므로 수정해서 사용하시면 됩니다.

    public static String formatTimeString(Date tempDate) {
        String msg = null;
        if (diffTime < TIME_MAX.SEC) {
            // sec 초
            msg = "just now";
        } else if ((diffTime /= TIME_MAX.SEC) < TIME_MAX.MIN) {
            // min 분
            msg = diffTime + " minutes ago";
        } else if ((diffTime /= TIME_MAX.MIN) < TIME_MAX.HOUR) {
            // hour 시간
            msg = (diffTime) + " hours ago";
        } else if ((diffTime /= TIME_MAX.HOUR) < TIME_MAX.DAY) {
            // day 날
            msg = (diffTime) + " days ago";
        } else if ((diffTime /= TIME_MAX.DAY) < TIME_MAX.MONTH) {
            // month 달
            msg = (diffTime) + " months ago";
        } else {
            msg = (diffTime) + " years ago";
        }
        return msg;
    }
 
cs


5. 시간 계산 함수에 필요한 단위를 만듭니다.

단위는 변수에 저장됩니다. System의 함수로 currentTimeMillis() 를 사용합니다. UTC시간을 이용해서 과거 기준 시간으로부터 지금까지 경과한 시간을 반환합니다. tempDate는 제가 만든 변수인데 여기엔 시간 데이터가 담깁니다. 그래서 getTime을 쓰면 위의 curTime과 연산이 가능하게 됩니다. 그 후 1000으로 나누면 초단위로 값이 계산됩니다.


        long curTime = System.currentTimeMillis();
        long regTime = tempDate.getTime();
        long diffTime = (curTime - regTime) / 1000;
cs


'Java' 카테고리의 다른 글

[android] 비트맵 파일 retrofit 통신 예제  (0) 2018.02.03
[android] Activity 구현 팁  (1) 2018.02.03
[android] Glide와 intent 사용하기  (0) 2018.02.03
[android] 구글맵 3  (0) 2018.02.03
[android] 구글맵 2  (0) 2018.02.03

+ Recent posts