Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用objective-c格式化从youtube api v3 reuqest返回的持续时间?_Ios_Objective C_Iphone_Youtube Data Api - Fatal编程技术网

Ios 如何使用objective-c格式化从youtube api v3 reuqest返回的持续时间?

Ios 如何使用objective-c格式化从youtube api v3 reuqest返回的持续时间?,ios,objective-c,iphone,youtube-data-api,Ios,Objective C,Iphone,Youtube Data Api,如何使用objective-c将此时间段“PT1H20M10S”格式化为“1:20:10”? 这是从对youtube的请求返回的。它给了我一个时间段。如何设置“PT1H20M10S”的样式,使其在我的应用程序中显示为“1:20:10”,以便于人们阅读?您可以使用扫描仪提取以下数字: NSString*应答器字符串 NSScanner*扫描仪=[NSScanner scannerWithString:originalString]; NSCharacterSet*数字=[NSCharacterSe

如何使用objective-c将此时间段“PT1H20M10S”格式化为“1:20:10”?
这是从对youtube的请求返回的。它给了我一个时间段。如何设置“PT1H20M10S”的样式,使其在我的应用程序中显示为“1:20:10”,以便于人们阅读?

您可以使用扫描仪提取以下数字:

NSString*应答器字符串

NSScanner*扫描仪=[NSScanner scannerWithString:originalString]; NSCharacterSet*数字=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”]

[scanner scanupCharactersFromset:numbers-intoString:NULL]

[扫描仪扫描字符从集合:数字到字符串:&数字字符串]


整数=[answerString integerValue]

您可以使用以下代码:

- (NSString *)parseDuration:(NSString *)duration {
  NSInteger hours = 0;
  NSInteger minutes = 0;
  NSInteger seconds = 0;

  NSRange timeRange = [duration rangeOfString:@"T"];
  duration = [duration substringFromIndex:timeRange.location];

  while (duration.length > 1) {
    duration = [duration substringFromIndex:1];

    NSScanner *scanner = [NSScanner.alloc initWithString:duration];
    NSString *part = [NSString.alloc init];
    [scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&part];

    NSRange partRange = [duration rangeOfString:part];

    duration = [duration substringFromIndex:partRange.location + partRange.length];

    NSString *timeUnit = [duration substringToIndex:1];
    if ([timeUnit isEqualToString:@"H"])
      hours = [part integerValue];
    else if ([timeUnit isEqualToString:@"M"])
      minutes = [part integerValue];
    else if ([timeUnit isEqualToString:@"S"])
      seconds = [part integerValue];
  }

  return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

您还可以阅读ISO_8601的持续时间。

试试这段代码。。我使用此代码获得了正确的输出

  func formatDurations (sender : String) ->String{
    var timeDuration : NSString!

    let string: NSString = sender
    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 = sender
            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 = sender
        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 = sender
            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 = sender
        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 = sender
            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 = sender
            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 = sender
            secs = secs.substringFromIndex(secs.rangeOfString("M").location + "M".characters.count)
            secs = secs.substringToIndex(secs.rangeOfString("S").location)
            var mins: NSString = sender
            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
}

使用字符串扩展名:

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)
}
}
用法:

override func viewWillAppear(animated: Bool) {

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

    print("result_Hour_Minute_Second: \(result_Hour_Minute_Second)")

}

如果视频长度为一小时,则格式为PT#H#M#S,如果最长为24小时,则格式为p#DT#H#M#S。请检查下面的修改方法:

NSString *formattedDuration = @"";

NSString *durationregX = @"^(P\\d+DT)[A-Z0-9]+$";
NSPredicate *checking = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", durationregX];
BOOL isDayLengthVideo = [checking evaluateWithObject: duration];
long getDayHours = 0;

if(isDayLengthVideo){
    NSArray *sliceDuration = [duration componentsSeparatedByString:@"DT"];
    NSString *getDay = [sliceDuration[0] stringByReplacingOccurrencesOfString:@"P" withString:@""];
    getDayHours = (long)[getDay integerValue] * 24;

    formattedDuration = [[[sliceDuration[1] stringByReplacingOccurrencesOfString:@"H" withString:@":"] stringByReplacingOccurrencesOfString:@"M" withString:@":"] stringByReplacingOccurrencesOfString:@"S" withString:@""];
}else{
    formattedDuration = [[[[duration stringByReplacingOccurrencesOfString:@"PT" withString:@""] stringByReplacingOccurrencesOfString:@"H" withString:@":"] stringByReplacingOccurrencesOfString:@"M" withString:@":"] stringByReplacingOccurrencesOfString:@"S" withString:@""];
}

NSString *clean_duration = @"";
NSArray *components = [formattedDuration componentsSeparatedByString:@":"];

NSInteger loopchecker = 0;
for (NSString *component in components) {
    loopchecker++;
    clean_duration = clean_duration.length > 0 ? [NSString stringWithFormat:@"%@:", clean_duration] : clean_duration; // ""

    if(component.length < 2){
        clean_duration = loopchecker == 1 && isDayLengthVideo ? [NSString stringWithFormat:@"%ld", ([component integerValue] + getDayHours)] : [NSString stringWithFormat:@"%@0%@", clean_duration, component];
        return clean_duration;
        continue;
    }
    clean_duration = [NSString stringWithFormat: @"%@%@", clean_duration, component];
}

return clean_duration;
NSString*formattedDuration=@”;
NSString*durationregX=@“^(P\\d+DT)[A-Z0-9]+$”;
NSPredicate*checking=[NSPredicate谓词格式:@“SELF MATCHES%@”,durationregX];
BOOL isDayLengthVideo=[检查evaluateWithObject:duration];
长getDayHours=0;
if(isDayLengthVideo){
NSArray*sliceDuration=[由字符串分隔的持续时间组件:@“DT”];
NSString*getDay=[sliceDuration[0]stringByReplacingOccurrencesOfString:@“P”带字符串:@”“;
getDayHours=(长)[getDay integerValue]*24;
formattedDuration=[[sliceDuration[1]StringByReplacingOccurrencessOfString:@“H”带字符串:@:“]stringByReplacingOccurrencesOfString:@“M”带字符串:@:“]stringByReplacingOccurrencesOfString:@“S”带字符串:@];
}否则{
formattedDuration=[[[duration StringByReplacingOccurrences of String:@“PT”with String:@”“]StringByReplacingOccurrences of String:@“H”with String:@:“]StringByReplacingOccurrences of String:@“M”with String:@:“]StringByReplacingOccurrences of String:@“S”with String:@];
}
NSString*clean_duration=@;
NSArray*components=[formattedDuration components由字符串分隔:@]:“;
NSInteger loopchecker=0;
用于(NSString*组件中的组件){
loopchecker++;
clean_duration=clean_duration.length>0?[NSString stringWithFormat:@“%@:,clean_duration]:clean_duration;/“”
如果(组件长度<2){
clean_duration=loopchecker==1&&isDayLengthVideo?[NSString stringWithFormat:@“%ld”,([component integerValue]+getDayHours]:[NSString stringWithFormat:@“%@0%@”,clean_duration,component];
返回清洁时间;
继续;
}
清理持续时间=[NSString stringWithFormat:@“%@%@”,清理持续时间,组件];
}
返回清洁时间;

简单Swift 4.2代码

    func parseDuration(videoDuration: String?) -> String {
    var hours: Int = 0
    var minutes: Int = 0
    var seconds: Int = 0

    if let videoDuration = videoDuration {
        var lastIndex = videoDuration.startIndex

        if let indexT = videoDuration.index(of: "T") {
            lastIndex = videoDuration.index(after: indexT)

            if let indexH = videoDuration.index(of: "H") {
                let hrs = String(videoDuration[lastIndex..<indexT])
                hours = Int(hrs) ?? 0
                lastIndex = videoDuration.index(after: indexH)
            }

            if let indexM = videoDuration.index(of: "M") {
                let min = String(videoDuration[lastIndex..<indexM])
                minutes = Int(min) ?? 0
                lastIndex = videoDuration.index(after: indexM)
            }

            if let indexS = videoDuration.index(of: "S") {
                let sec = String(videoDuration[lastIndex..<indexS])
                seconds = Int(sec) ?? 0
            }
        }
    }
    return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
func parseDuration(videoDuration:String?)->String{
变量小时数:Int=0
变量分钟数:Int=0
变量秒数:Int=0
如果让videoDuration=videoDuration{
var lastIndex=videoDuration.startIndex
如果let indexT=videoDuration.index(of:“T”){
lastIndex=videoDuration.index(后面是:indexT)
如果let indexH=videoDuration.index(of:“H”){

设hrs=字符串(视频持续时间)[lastIndex..可能是重复的@user2027279吗?Alaa Agwa您希望它是以秒为单位的实际时间,还是以字符串格式?我认为两个简单的搜索将给出答案,您只需要搜索如何从NSString解析NSDate以及如何格式化该日期,两者都使用NSDateFormatternice ans您的答案为+1。:D