막무가내 삽질 블로그

Room에 저장된 날짜와 현재날짜 비교 본문

Android

Room에 저장된 날짜와 현재날짜 비교

joong~ 2020. 3. 23. 19:39
728x90

기존에는 날짜를 저장할 때 string으로 저장했었다. 다시 불러올 때 timestamp로 변환해 현재 날짜와 비교해서 로직을 처리 했었다. 하지만 중복되는 코드를 볼 수 있었고 또한 룸에서 가져올 때 ORDER BY time DESC 했었을 때 문제점은 12시가 제일 높게 인식한다. (yy-mm-dd hh.mm.ss a 기준)

 

이 문제를 해결 하기 위해 long 타입으로 넣으면 간단하게 해결할 수 있었고 코드중복을 줄일 수 있었다.

 

 

기존 테스트 코드

private lateinit var local: String // 오늘

fun main() {
    getTime()

    // 현재 날짜 가져오기
    val today = SimpleDateFormat("yy년 MM월 dd일", Locale.KOREA)
    val date = Date()
    val tz = TimeZone.getTimeZone("Asia/Seoul")
    today.timeZone = tz
    val time = today.format(date)

    // 타임스탬프로 변환
    val todayTimestamp = today.parse(time).time

    // 로컬 DB 가져와서 타임스탬프로 변환
    val db = local.split(" : ")
    val start = today.parse(db[0]).time

    // 날짜 비교
    val diff = (todayTimestamp - start)
    val check = diff / (24*60*60*1000)

    println("$todayTimestamp, $start, 일수차: $check")
}


private fun getTime() {
    val date = Date()
    val year = SimpleDateFormat("20년 02월 02일 : hh시 mm분 ss초 a")
    val tz = TimeZone.getTimeZone("Asia/Seoul")
    year.timeZone = tz
    local = year.format(date)
}

 

 

변경 코드

@BindingAdapter("noteTime")
fun noteTime(view: TextView, url: Long) {
    val now = System.currentTimeMillis()
    val nowDate = Date(now)

    val localDate = Date(url)
    val dt = SimpleDateFormat("yy-MM-dd")
    val tz = TimeZone.getTimeZone("Asia/Seoul")
    dt.timeZone = tz

    val nowTime = dt.format(nowDate)
    val localTime = dt.format(localDate)

    val nowTimestamp = dt.parse(nowTime).time
    val localTimestamp = dt.parse(localTime).time

    val check = (nowTimestamp - localTimestamp)
    val diff = check / (24 * 60 * 60 * 1000)

    when (diff) {
       /* .. 처리 .. */
    }
}

 

 

Comments