투케이2K

117. (swift/xcode) [유틸 파일] getDateMinus - 두 날짜 타임스탬프 값 확인해 시 (hour) , 분 (minute) , 초 (seconds) 차이 반환 본문

Swift

117. (swift/xcode) [유틸 파일] getDateMinus - 두 날짜 타임스탬프 값 확인해 시 (hour) , 분 (minute) , 초 (seconds) 차이 반환

투케이2K 2022. 10. 28. 10:28

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // MARK: - [두 날짜 차이 계산 수행 실시 : 타임 스탬프 값 기준]
    func getDateMinus(bigDate:String, smallDate:String) -> Int{
        
        /*
        // -----------------------------------------
        [getDateMinus 메소드 설명]
        // -----------------------------------------
        1. 날짜 형식 : date 형식을 milli seconds 형식으로 받는다 (ex: 1644466392686)
        // -----------------------------------------
        2. bigDate (큰 날짜) - smallDate (작은 날짜) 연산 수행
        // -----------------------------------------
        3. 리턴 형식 : 초 , 분 , 시간 단위 선택
        // -----------------------------------------
        4. 호출 예시 :
          - C_Util().getDateMinus(bigDate:"1644466392686", smallDate:"1644466392686") // [동일]
          - C_Util().getDateMinus(bigDate:"1644466392686", smallDate:"1644466169826") // [다름]
        // -----------------------------------------
        */
        
        
        // [초기 리턴 데이터 선언]
        var returnData = 0
        
        
        // [인풋으로 들어온 값에 공백이 있는 경우 제거 실시]
        var _bigDate = String(describing: bigDate ?? "")
        var _smallDate = String(describing: smallDate ?? "")
        
        _bigDate = _bigDate.replacingOccurrences(of: " ", with: "")
        _smallDate = _smallDate.replacingOccurrences(of: " ", with: "")
        
        
        // [인풋으로 들어온 값이 널이 아닌지 확인 실시]
        if _bigDate != nil && _bigDate.count>0 && _bigDate != ""
            && _smallDate != nil && _smallDate.count>0 && _smallDate != "" {
            
            
            // [인풋으로 들어온 값이 모두 숫자로 구성되어 있는지 확인 실시]
            var _bigDate_NotNumber = false
            var _smallDate_NotNumber = false
            
            for _big_char in _bigDate {
                if _big_char.isNumber == false { // 정수 값이 아닌 경우
                    _bigDate_NotNumber = true
                }
            }
            for _small_char in _smallDate {
                if _small_char.isNumber == false { // 정수 값이 아닌 경우
                    _smallDate_NotNumber = true
                }
            }
            
            
            // [로직 처리 수행 실시]
            if _bigDate_NotNumber == false && _smallDate_NotNumber == false { // 모두 정수로 구성된 경우
                
                let _big_int64 = Int64(_bigDate) ?? 0 // 형변환
                let _small_int64 = Int64(_smallDate) ?? 0 // 형변환

                
                let b_date = Date(timeIntervalSince1970: TimeInterval(Int64(_big_int64) ?? 0) / 1000) // 정식 날짜로 출력
                let s_date = Date(timeIntervalSince1970: TimeInterval(Int64(_small_int64) ?? 0) / 1000) // 정식 날짜로 출력
                
                
                let minus = (_big_int64 - _small_int64) // 밀리세컨드 빼기 수행
                let seconds = minus / 1000 // 초 단위 기준 차이
                let minute = seconds / 60 // 분 단위 기준 차이
                let hour = minute / 60 // 시간 단위 기준 차이


                print("")
                print("====================================")
                print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 결과 확인]")
                print("-------------------------------")
                print("_bigDate [인풋 날짜_1] : ", _bigDate)
                print("_smallDate [인풋 날짜_2] : ", _smallDate)
                print("-------------------------------")
                print("b_date [인풋 날짜_1] : ", b_date)
                print("s_date [인풋 날짜_2] : ", s_date)
                print("-------------------------------")
                print("minus [빼기 수행] :: ", minus)
                print("seconds (초) 차이 :: ", seconds)
                print("minute (분) 차이 :: ", minute)
                print("hour (시간) 차이 :: ", hour)
                print("====================================")
                print("")
                
                
                // [원하는 타입 선택 후 리턴 결과 반환 실시]
                returnData = Int(minute) // [분]
                //returnData = Int(seconds) // [초]
                return returnData
            }
            else { // 문자가 포함된 경우
                print("")
                print("====================================")
                print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
                print("-------------------------------")
                print("_bigDate [인풋 날짜_1] : ", _bigDate)
                print("-------------------------------")
                print("_smallDate [인풋 날짜_2] : ", _smallDate)
                print("-------------------------------")
                print("error [문자 에러] : ", "비정상 데이터")
                print("====================================")
                print("")
                
                // [결과 리턴 수행 실시]
                return returnData
            }
        }
        else {
            print("")
            print("====================================")
            print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
            print("-------------------------------")
            print("_bigDate [인풋 날짜_1] : ", _bigDate)
            print("-------------------------------")
            print("_smallDate [인풋 날짜_2] : ", _smallDate)
            print("-------------------------------")
            print("error [널 에러] : ", "비정상 데이터")
            print("====================================")
            print("")
            
            // [결과 리턴 수행 실시]
            return returnData
        }
    }

 


 

반응형
Comments