투케이2K

117. (kotlin/코틀린) [유틸 파일] getDateMinus - 두 날짜 차이 계산 수행 실시 본문

Kotlin

117. (kotlin/코틀린) [유틸 파일] getDateMinus - 두 날짜 차이 계산 수행 실시

투케이2K 2022. 12. 20. 20:49

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // TODO [SEARCH FAST] : [RETURN] getDateMinus : 두 날짜 차이 계산 수행 실시 : 날짜, 시, 분, 초 int 형 반환
        fun getDateMinus(bigDate : String, smallDate : String) : Int {

            /**
             * // -----------------------------------------
             * // [getDateMinus 메소드 설명]
             * // -----------------------------------------
             * 1. 날짜 형식 : yyyyMMddkkmmss 24시간 형태로 구성
             * // -----------------------------------------
             * 2. bigDate 큰 날짜 - smallDate 작은 날짜 연산 수행
             * // -----------------------------------------
             * 3. 리턴 형식 : 초 , 분 , 시간 , 일자 단위 선택 (int 형 반환)
             * // -----------------------------------------
             * 4. 인풋 예시 :
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 15") // 동일
             *
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 10") // 초 [다름]
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 25 15") // 분 [다름]
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 17 30 15") // 시간 [다름]
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 09 18 30 15") // 일자 [다름]
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 01 10 18 30 15") // 월 [다름]
             *    - C_Util.getDateMinus("2022 02 10 18 30 15", "2021 02 10 18 30 15") // 연도 [다름]
             * // -----------------------------------------
             * */


            // [초기 리턴 데이터 선언]
            /**
             * // -----------------------------------------
             * // [getDateMinus 메소드 설명]
             * // -----------------------------------------
             * 1. 날짜 형식 : yyyyMMddkkmmss 24시간 형태로 구성
             * // -----------------------------------------
             * 2. bigDate 큰 날짜 - smallDate 작은 날짜 연산 수행
             * // -----------------------------------------
             * 3. 리턴 형식 : 초 , 분 , 시간 , 일자 단위 선택 (int 형 반환)
             * // -----------------------------------------
             * 4. 인풋 예시 :
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 15") // 동일
             *
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 30 10") // 초 [다름]
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 18 25 15") // 분 [다름]
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 10 17 30 15") // 시간 [다름]
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 02 09 18 30 15") // 일자 [다름]
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2022 01 10 18 30 15") // 월 [다름]
             * - C_Util.getDateMinus("2022 02 10 18 30 15", "2021 02 10 18 30 15") // 연도 [다름]
             * // -----------------------------------------
             */


            // [초기 리턴 데이터 선언]
            var returnData = 0
            var minusSec: Long = 0
            var minusMin: Long = 0
            var minusHour: Long = 0
            var minusDay: Long = 0


            // [인풋으로 들어온 값에 공백이 있는 경우 제거 실시]
            var bigDates = bigDate.replace(" ", "")
            var smallDates = smallDate.replace(" ", "")


            // [로직 처리 실시]
            try {

                // [데이터 널 검증 실시]
                if (C_Util.stringNotNull(bigDates) == true && C_Util.stringNotNull(smallDates) == true){

                    //[인풋으로 들어온 데이터가 int 형 인지 검증 수행]
                    var bigDate_NotNumber = false
                    var smallDate_NotNumber = false

                    for (i in 0 .. bigDates.length-1 step(1)) {
                        if (Character.isDigit(bigDates[i]) == false) { // 숫자가 아닌 경우
                            bigDate_NotNumber = true
                        }
                    }
                    for (j in 0 .. smallDates.length-1 step(1)) {
                        if (Character.isDigit(smallDates[j]) == false) { // 숫자가 아닌 경우
                            smallDate_NotNumber = true
                        }
                    }
                    if (bigDate_NotNumber == true || smallDate_NotNumber == true) { // 문자가 포함된 데이터 인 경우
                        Log.i("---","---")
                        Log.e("//===========//","================================================")
                        Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
                        Log.i("","\n"+"-----------------------------------------")
                        Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+bigDates+"]")
                        Log.i("","\n"+"-----------------------------------------")
                        Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+smallDates+"]")
                        Log.i("","\n"+"-----------------------------------------")
                        Log.i("","\n"+"[error [문자 에러] :: "+"비정상 데이터"+"]")
                        Log.e("//===========//","================================================")
                        Log.i("---","---")
                    }
                    else {

                        // [로직 처리 수행 실시]
                        val bigFormat = SimpleDateFormat("yyyyMMddkkmmss").parse(bigDates)
                        val smallFormat = SimpleDateFormat("yyyyMMddkkmmss").parse(smallDates)


                        // [초, 분, 시간, 일자 차이 계산 실시 >> long 타입]
                        minusSec = (bigFormat.time - smallFormat.time) / 1000 // [초]
                        minusMin = (bigFormat.time - smallFormat.time) / 60000 // [분]
                        minusHour = (bigFormat.time - smallFormat.time) / 3600000 // [시간]
                        minusDay = minusSec / (24 * 60 * 60) // [일자]


                        // TODO [리턴하려는 값을 선택 후 결과 반환]
                        returnData = minusMin.toInt() // [분]
                        //returnData = minusSec.toInt(); // [초]

                    }

                }
                else {
                    Log.i("---","---")
                    Log.e("//===========//","================================================")
                    Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
                    Log.i("","\n"+"-----------------------------------------")
                    Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+bigDates+"]")
                    Log.i("","\n"+"-----------------------------------------")
                    Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+smallDates+"]")
                    Log.i("","\n"+"-----------------------------------------")
                    Log.i("","\n"+"[error [널 에러] :: "+"비정상 데이터"+"]")
                    Log.e("//===========//","================================================")
                    Log.i("---","---")
                }

            }
            catch (e: Exception) {
                e.printStackTrace()
            }


            // [로그 출력 실시]
            //*
            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[C_Util >> getDateMinus() :: 두 날짜 차이 결과 확인]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[bigDate [인풋 날짜_1] :: "+bigDate+"]")
            Log.i("","\n"+"[smallDate [인풋 날짜_2] :: "+smallDate+"]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[minusSec [초] 차이 :: "+minusSec.toString()+"]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[minusMin [분] 차이 :: "+minusMin.toString()+"]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[minusHour [시간] 차이 :: "+minusHour.toString()+"]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[minusDay [날짜] 차이 :: "+minusDay.toString()+"]")
            Log.i("","\n"+"-----------------------------------------")
            Log.i("","\n"+"[RETURN :: "+returnData.toString()+"]")
            Log.w("//===========//","================================================")
            Log.i("---","---")
            // */


            // [리턴 반환 실시]
            return returnData

        }
 

[결과 출력]

 

 
반응형
Comments