How to parse an ISO-8601 duration in Objective C?

前端 未结 12 674
清歌不尽
清歌不尽 2020-12-01 06:52

I\'m looking for an easy way to parse a string that contains an ISO-8601 duration in Objective C. The result should be something usable like a NSTimeI

12条回答
  •  隐瞒了意图╮
    2020-12-01 07:20

    This version parse every youtube duration without errors.
    Important: This version use ARC.

    - (NSString*)parseISO8601Time:(NSString*)duration
    {
        NSInteger hours = 0;
        NSInteger minutes = 0;
        NSInteger seconds = 0;
    
        //Get Time part from ISO 8601 formatted duration http://en.wikipedia.org/wiki/ISO_8601#Durations
        duration = [duration substringFromIndex:[duration rangeOfString:@"T"].location];
    
        while ([duration length] > 1) { //only one letter remains after parsing
            duration = [duration substringFromIndex:1];
    
            NSScanner *scanner = [[NSScanner alloc] initWithString:duration];
    
            NSString *durationPart = [[NSString alloc] init];
            [scanner scanCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] intoString:&durationPart];
    
            NSRange rangeOfDurationPart = [duration rangeOfString:durationPart];
    
            duration = [duration substringFromIndex:rangeOfDurationPart.location + rangeOfDurationPart.length];
    
            if ([[duration substringToIndex:1] isEqualToString:@"H"]) {
                hours = [durationPart intValue];
            }
            if ([[duration substringToIndex:1] isEqualToString:@"M"]) {
                minutes = [durationPart intValue];
            }
            if ([[duration substringToIndex:1] isEqualToString:@"S"]) {
                seconds = [durationPart intValue];
            }
        }
    
        return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    }
    

提交回复
热议问题