본문 바로가기
안드로이드 코틀린

[Kotlin][Android] 안드로이드 시간 표현하기

by teamnova 2022. 8. 6.
728x90

안녕하세요. 

안드로이드에서 시간을 표현해야 할 다양한 경우가 있습니다. 

그 중 유투브 댓글에서 시간을 표현하는 방법인 'x분 전', 'x시간 전', 'x일 전', 'x주 전' 등과 같은 포맷으로 변경하는 방법을 알아보겠습니다. 

 

1. string to millisecond

@SuppressLint("SimpleDateFormat")
fun dateTimeToMillSec(dateTime: String): Long{
    var timeInMilliseconds: Long = 0
    val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    try {
        val mDate = sdf.parse(dateTime)
        timeInMilliseconds = mDate.time
    } catch (e: ParseException) {
        e.printStackTrace()
    }
    return timeInMilliseconds
}

스트링으로 저장된 값을 millisecond 단위로 변경하는 메서드입니다. 

위의 형식과 다르다면 "yyyy-MM-dd HH:mm:ss" <- 이 부분을 필요한 형식으로 변경해서 사용하시면 됩니다.

 

2. 현재 시간과 계산

fun calculationTime(createDateTime: Long): String{
    val nowDateTime = Calendar.getInstance().timeInMillis //현재 시간 to millisecond
    var value = ""
    val differenceValue = nowDateTime - createDateTime //현재 시간 - 비교가 될 시간
    when {
        differenceValue < 60000 -> { //59초 보다 적다면
            value = "방금 전"
        }
        differenceValue < 3600000 -> { //59분 보다 적다면
            value =  TimeUnit.MILLISECONDS.toMinutes(differenceValue).toString() + "분 전"
        }
        differenceValue < 86400000 -> { //23시간 보다 적다면
            value =  TimeUnit.MILLISECONDS.toHours(differenceValue).toString() + "시간 전"
        }
        differenceValue <  604800000 -> { //7일 보다 적다면
            value =  TimeUnit.MILLISECONDS.toDays(differenceValue).toString() + "일 전"
        }
        differenceValue < 2419200000 -> { //3주 보다 적다면
            value =  (TimeUnit.MILLISECONDS.toDays(differenceValue)/7).toString() + "주 전"
        }
        differenceValue < 31556952000 -> { //12개월 보다 적다면
            value =  (TimeUnit.MILLISECONDS.toDays(differenceValue)/30).toString() + "개월 전"
        }
        else -> { //그 외
            value =  (TimeUnit.MILLISECONDS.toDays(differenceValue)/365).toString() + "년 전"
        }
    }
    return value
}

1번 메서드를 사용해서 얻은 값을 2번 메서드의 파라미터 자리에 넣어 사용하면 결과값을 얻을 수 있습니다. 

 

3. 사용

val testDateTime1 = "2022-05-03 12:05:06"
val testDateTime2 = "2022-06-20 16:25:56"
val testDateTime3 = "2022-07-03 12:05:06"
val testDateTime4 = "2021-06-20 16:25:56"

val result1 = calculationTime(dateTimeToMillSec(testDateTime1))
val result2 = calculationTime(dateTimeToMillSec(testDateTime2))
val result3 = calculationTime(dateTimeToMillSec(testDateTime3))
val result4 = calculationTime(dateTimeToMillSec(testDateTime4))

테스트를 위해 임의의 날짜를 만들고 

메서드를 사용해줍니다. 

 

4. 결과

잘 계산된 모습을 확인할 수 있습니다.