Swift - Integer conversion to Hours/Minutes/Seconds

后端 未结 23 1211
無奈伤痛
無奈伤痛 2020-11-28 01:47

I have a (somewhat?) basic question regarding time conversions in Swift.

I have an integer that I would like converted into Hours / Minutes / Second

23条回答
  •  春和景丽
    2020-11-28 02:10

    According to GoZoner answer I have wrote an Extension to get the time formatted according to the hours, minute, and seconds:

    extension Double {
    
        func secondsToHoursMinutesSeconds () -> (Int?, Int?, Int?) {
            let hrs = self / 3600
            let mins = (self.truncatingRemainder(dividingBy: 3600)) / 60
            let seconds = (self.truncatingRemainder(dividingBy:3600)).truncatingRemainder(dividingBy:60)
            return (Int(hrs) > 0 ? Int(hrs) : nil , Int(mins) > 0 ? Int(mins) : nil, Int(seconds) > 0 ? Int(seconds) : nil)
        }
    
        func printSecondsToHoursMinutesSeconds () -> String {
    
            let time = self.secondsToHoursMinutesSeconds()
    
            switch time {
            case (nil, let x? , let y?):
                return "\(x) min \(y) sec"
            case (nil, let x?, nil):
                return "\(x) min"
            case (let x?, nil, nil):
                return "\(x) hr"
            case (nil, nil, let x?):
                return "\(x) sec"
            case (let x?, nil, let z?):
                return "\(x) hr \(z) sec"
            case (let x?, let y?, nil):
                return "\(x) hr \(y) min"
            case (let x?, let y?, let z?):
                return "\(x) hr \(y) min \(z) sec"
            default:
                return "n/a"
            }
        }
    }
    
    let tmp = 3213123.printSecondsToHoursMinutesSeconds() // "892 hr 32 min 3 sec"
    

提交回复
热议问题