如何在swift中转换youtube api的持续时间?

时间:2016-05-05 10:25:27

标签: ios xcode swift

我是一位新的快速开发者,我不知道如何将持续时间从youtube api转换为正常的时间格式?

4 个答案:

答案 0 :(得分:5)

一个更简单的实现,只考虑hh:mm:ss格式的返回值。

extension String {

    func getYoutubeFormattedDuration() -> String {

        let formattedDuration = self.stringByReplacingOccurrencesOfString("PT", withString: "").stringByReplacingOccurrencesOfString("H", withString: ":").stringByReplacingOccurrencesOfString("M", withString: ":").stringByReplacingOccurrencesOfString("S", withString: "")

        let components = formattedDuration.componentsSeparatedByString(":")
        var duration = ""
        for component in components {
            duration = duration.characters.count > 0 ? duration + ":" : duration
            if component.characters.count < 2 {
                duration += "0" + component
                continue
            }
            duration += component
        }

        return duration

    }

}

** Swift 3

  func getYoutubeFormattedDuration() -> String {

    let formattedDuration = self.replacingOccurrences(of: "PT", with: "").replacingOccurrences(of: "H", with:":").replacingOccurrences(of: "M", with: ":").replacingOccurrences(of: "S", with: "")

    let components = formattedDuration.components(separatedBy: ":")
    var duration = ""
    for component in components {
        duration = duration.characters.count > 0 ? duration + ":" : duration
        if component.characters.count < 2 {
            duration += "0" + component
            continue
        }
        duration += component
    }

    return duration

}

示例结果:

"PT3H2M31S".getYoutubeFormattedDuration() //returns "03:02:31"
"PT2M31S".getYoutubeFormattedDuration() //returns "02:31"
"PT31S".getYoutubeFormattedDuration() //returns "31"

答案 1 :(得分:1)

使用字符串扩展名:

extension String{

    func formatDurationsFromYoutubeAPItoNormalTime (targetString : String) ->String{

        var timeDuration : NSString!
        let string: NSString = targetString

        if string.rangeOfString("H").location == NSNotFound && string.rangeOfString("M").location == NSNotFound{

            if string.rangeOfString("S").location == NSNotFound {
                timeDuration = NSString(format: "00:00")
            } else {
                var secs: NSString = targetString
                secs = secs.substringFromIndex(secs.rangeOfString("PT").location + "PT".characters.count)
                secs = secs.substringToIndex(secs.rangeOfString("S").location)

                timeDuration = NSString(format: "00:%02d", secs.integerValue)
            }
        }
        else if string.rangeOfString("H").location == NSNotFound {
            var mins: NSString = targetString
            mins = mins.substringFromIndex(mins.rangeOfString("PT").location + "PT".characters.count)
            mins = mins.substringToIndex(mins.rangeOfString("M").location)

            if string.rangeOfString("S").location == NSNotFound {
                timeDuration = NSString(format: "%02d:00", mins.integerValue)
            } else {
                var secs: NSString = targetString
                secs = secs.substringFromIndex(secs.rangeOfString("M").location + "M".characters.count)
                secs = secs.substringToIndex(secs.rangeOfString("S").location)

                timeDuration = NSString(format: "%02d:%02d", mins.integerValue, secs.integerValue)
            }
        } else {
            var hours: NSString = targetString
            hours = hours.substringFromIndex(hours.rangeOfString("PT").location + "PT".characters.count)
            hours = hours.substringToIndex(hours.rangeOfString("H").location)

            if string.rangeOfString("M").location == NSNotFound && string.rangeOfString("S").location == NSNotFound {
                timeDuration = NSString(format: "%02d:00:00", hours.integerValue)
            } else if string.rangeOfString("M").location == NSNotFound {
                var secs: NSString = targetString
                secs = secs.substringFromIndex(secs.rangeOfString("H").location + "H".characters.count)
                secs = secs.substringToIndex(secs.rangeOfString("S").location)

                timeDuration = NSString(format: "%02d:00:%02d", hours.integerValue, secs.integerValue)
            } else if string.rangeOfString("S").location == NSNotFound {
                var mins: NSString = targetString
                mins = mins.substringFromIndex(mins.rangeOfString("H").location + "H".characters.count)
                mins = mins.substringToIndex(mins.rangeOfString("M").location)

                timeDuration = NSString(format: "%02d:%02d:00", hours.integerValue, mins.integerValue)
            } else {
                var secs: NSString = targetString
                secs = secs.substringFromIndex(secs.rangeOfString("M").location + "M".characters.count)
                secs = secs.substringToIndex(secs.rangeOfString("S").location)
                var mins: NSString = targetString
                mins = mins.substringFromIndex(mins.rangeOfString("H").location + "H".characters.count)
                mins = mins.substringToIndex(mins.rangeOfString("M").location)

                timeDuration = NSString(format: "%02d:%02d:%02d", hours.integerValue, mins.integerValue, secs.integerValue)
            }
        }
        return timeDuration as String
    }

}

用法:

override func viewWillAppear(animated: Bool) {

let youtubeVideoDurationString = "PT15M51S"   

let resultString = youtubeVideoDurationString.formatDurationsFromYoutubeAPItoNormalTime(youtubeVideoDurationString)
    print(resultString)

}

答案 2 :(得分:1)

在Swift 5中

extension String {

func getYoutubeFormattedDuration() -> String {

    let formattedDuration = self.replacingOccurrences(of: "PT", with: "").replacingOccurrences(of: "H", with:":").replacingOccurrences(of: "M", with: ":").replacingOccurrences(of: "S", with: "")

    let components = formattedDuration.components(separatedBy: ":")
    var duration = ""
    for component in components {
        duration = duration.count > 0 ? duration + ":" : duration
        if component.count < 2 {
            duration += "0" + component
            continue
        }
        duration += component
    }

    return duration

}

}

用法:

let youtubeVideoDurationString = "PT2M24S"
youtubeVideoDurationString.getYoutubeFormattedDuration() //returns 02:24

答案 3 :(得分:0)

转换小时:分钟:第二种格式: -

使用字符串扩展名:

extension String{

func parseVideoDurationOfYoutubeAPI(videoDuration: String?) -> String {

var videoDurationString = videoDuration! as NSString

var hours: Int = 0
var minutes: Int = 0
var seconds: Int = 0
let timeRange = videoDurationString.rangeOfString("T")

videoDurationString = videoDurationString.substringFromIndex(timeRange.location)
while videoDurationString.length > 1 {

    videoDurationString = videoDurationString.substringFromIndex(1)

    let scanner = NSScanner(string: videoDurationString as String) as NSScanner
    var part: NSString?

    scanner.scanCharactersFromSet(NSCharacterSet.decimalDigitCharacterSet(), intoString: &part)

    let partRange: NSRange = videoDurationString.rangeOfString(part! as String)

    videoDurationString = videoDurationString.substringFromIndex(partRange.location + partRange.length)
    let timeUnit: String = videoDurationString.substringToIndex(1)


    if (timeUnit == "H") {
        hours = Int(part as! String)!
    }
    else if (timeUnit == "M") {
        minutes = Int(part as! String)!
    }
    else if (timeUnit == "S") {
        seconds   = Int(part! as String)!
    }
    else{
    }

}
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)

} }

使用方法:     覆盖func viewWillAppear(动画:Bool){

    let youtubeVideoDurationString = "PT15M51S"

    let result_Hour_Minute_Second = youtubeVideoDurationString.parseVideoDurationOfYoutubeAPI("PT15M51S") as String

    print("result_Hour_Minute_Second: \(result_Hour_Minute_Second)")

}