본문 바로가기
🖥 Programming/📱 Android (Java)

[android] 현재시간구하기, 시간비교하기 (Date, diffDate)

by MinChan-Youn 2021. 8. 23.

Android에서 Date관련된 작업을 진행할때가 있는데 그때 사용될 수 있는 현재시간구하기, 시간비교하기에 대해서 알아보겠습니다.

 

[현재 시간 구하기]

/** 현재시간 구하기 ["yyyy-MM-dd HH:mm:ss"] (*HH: 24시간)*/
fun getTime(): String {
    var now = System.currentTimeMillis()
    var date = Date(now)

    var dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    var getTime = dateFormat.format(date)

    return getTime
}

 

[현재날짜와 시간차 비교하여 텍스트로 반환]

**보통 어떤 게시글에 들어가는 시간값 비교한 내용을 출력할때 사용**

/** 두 날짜 사이의 간격 계산해서 텍스트로 반환 */
fun intervalBetweenDateText(beforeDate: String): String {
    val nowFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(getTime())
    val beforeFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(beforeDate)

    val diffMilliseconds = nowFormat.time - beforeFormat.time
    val diffSeconds = diffMilliseconds / 1000
    val diffMinutes = diffMilliseconds / (60 * 1000)
    val diffHours = diffMilliseconds / (60 * 60 * 1000)
    val diffDays = diffMilliseconds / (24 * 60 * 60 * 1000)

    val nowCalendar = Calendar.getInstance().apply { time = nowFormat }
    val beforeCalendar = Calendar.getInstance().apply { time = beforeFormat }

    val diffYears = nowCalendar.get(Calendar.YEAR) - beforeCalendar.get(Calendar.YEAR)
    var diffMonths = diffYears * 12 + nowCalendar.get(Calendar.MONTH) - beforeCalendar.get(Calendar.MONTH)
    if (nowCalendar.get(Calendar.DAY_OF_MONTH) < beforeCalendar.get(Calendar.DAY_OF_MONTH)) {
        // 현재 날짜의 일(day) 값이 이전 날짜의 일(day) 값보다 작은 경우에만 월 차이를 1 감소시킴
        // Ex) 5.31일과 6.2일은 2일차이지만 month가 1로 계속 나오는 이슈해결을 위해서
        diffMonths--
    }

    if (diffYears > 0) {
        return "${diffYears}년 전"
    }
    if (diffMonths > 0) {
        return "${diffMonths}개월 전"
    }
    if (diffDays > 0) {
        return "${diffDays}일 전"
    }
    if (diffHours > 0) {
        return "${diffHours}시간 전"
    }
    if (diffMinutes > 0) {
        return "${diffMinutes}분 전"
    }
    if (diffSeconds > 0) {
        return "${diffSeconds}초 전"
    }
    if(diffSeconds > -1){
        return "방금"
    }
    return ""
   }

 

[날짜형식변경] 

 

/** 날짜 형식변경 */
fun changeDateFormat(date: String): String{
    // ["yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"] -> ["yyyy-MM-dd HH:mm"]
    try{
        val old_format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") // 받은 데이터 형식
        old_format.timeZone = TimeZone.getTimeZone("Asia/Seoul")
        val new_format = SimpleDateFormat("yyyy-MM-dd HH:mm") // 바꿀 데이터 형식
        val old_date = old_format.parse(date) //ex) "2016-11-01T15:25:31.000Z" // 000 - 밀리 세컨드
        return new_format.format(old_date)
    }catch (e: Exception) {
        e.printStackTrace()
    }

    return ""
}



[date 날짜에서 하루 이전 날짜로 설정하기] 

date.setDate(date.getDate()-1);



[날짜 비교하기]

SimpleDateFormat dateFormat = new  SimpleDateFormat("yyyy-MM-dd HH:mm", 
	java.util.Locale.getDefault()); Date date1 = dateFormat.parse("2014-01-29 13:30"); 
Date date2 = dateFormat.parse("2014-01-30 13:30"); 
date1.after(date2)
//date1이 date2보다 이후 일때 true, 아니면 false




[string -> date로 변환]

SimpleDateFormat dateFormat = new  SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault());
String strDate = "2021-01-01 13:30";
Date date = dateFormat.parse(strDate);

// 임시로 지정한 "yyyy-MM-dd HH:mm"와 "2014-01-29 13:30" 글씨끼리 형식이 같아야 함!




[date -> string로 변환]

SimpleDateFormat dateFormat = new  SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault());
Date date = new Date();
String strDate = dateFormat.format(date);