iOS Format String into minutes and seconds

前端 未结 7 1219
清酒与你
清酒与你 2020-12-10 12:56

I am receiving a string from the YouTube JSONC api, but the duration is coming as a full number i.e 2321 instead of 23:21 or 2 instead of 0:02. How would I go about fixing t

相关标签:
7条回答
  • 2020-12-10 13:24

    You should use DateComponentsFormatter if the duration is intended to be user-facing:

    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [ .minute, .second ]
    formatter.zeroFormattingBehavior = [ .pad ]
    let formattedDuration = formatter.string(from: duration)!
    
    0 讨论(0)
  • 2020-12-10 13:24
    int sec = diff;//INFO: time in seconds
    
    int a_sec = 1;
    int a_min = a_sec * 60;
    int an_hour = a_min * 60;
    int a_day = an_hour * 24;
    int a_month = a_day * 30;
    int a_year = a_day * 365;
    
    NSString *text = @"";
    if (sec >= a_year)
    {
        int years = floor(sec / a_year);
        text = [NSString stringWithFormat:@"%d year%@ ", years, years > 0 ? @"s" : @""];
        sec = sec - (years * a_year);
    }
    
    if (sec >= a_month)
    {
        int months = floor(sec / a_month);
    text = [NSString stringWithFormat:@"%@%d month%@ ", text, months, months > 0 ? @"s" : @""];
        sec = sec - (months * a_month);
    
    }
    
    if (sec >= a_day)
    {
        int days = floor(sec / a_day);
    text = [NSString stringWithFormat:@"%@%d day%@ ", text, days, days > 0 ? @"s" : @""];
    
        sec = sec - (days * a_day);
    }
    
    if (sec >= an_hour)
    {
        int hours = floor(sec / an_hour);
    text = [NSString stringWithFormat:@"%@%d hour%@ ", text, hours, hours > 0 ? @"s" : @""];
    
        sec = sec - (hours * an_hour);
    }
    
    if (sec >= a_min)
    {
        int minutes = floor(sec / a_min);
    text = [NSString stringWithFormat:@"%@%d minute%@ ", text, minutes, minutes > 0 ? @"s" : @""];
    
        sec = sec - (minutes * a_min);
    }
    
    if (sec >= a_sec)
    {
        int seconds = floor(sec / a_sec);
    text = [NSString stringWithFormat:@"%@%d second%@", text, seconds, seconds > 0 ? @"s" : @""];
    }
       NSLog(@"<%@>", text);
    
    0 讨论(0)
  • 2020-12-10 13:25

    Objective C:

    NSDateComponentsFormatter * formatter = [[NSDateComponentsFormatter alloc]init];
    [formatter setUnitsStyle:NSDateComponentsFormatterUnitsStyleShort];
    [formatter setAllowedUnits:NSCalendarUnitSecond | NSCalendarUnitMinute];
    [formatter setZeroFormattingBehavior:NSDateComponentsFormatterZeroFormattingBehaviorPad];
    return [formatter stringFromTimeInterval:duration];
    
    0 讨论(0)
  • 2020-12-10 13:38

    Assuming the duration value is really the duration in seconds, then you can calculate the number of minutes and seconds and then format those into a string.

    int duration = ... // some duration from the JSON
    int minutes = duration / 60;
    int seconds = duration % 60;
    
    NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds];
    
    0 讨论(0)
  • 2020-12-10 13:43

    You can subString the 2321 and get the first string as 23 and the second as 21 and convert them to int. Also check for the length of the text:

    if (text.length < 4)
       //add zeros on the left of String until be of length 4
    
    0 讨论(0)
  • 2020-12-10 13:44

    Try this very optimized

    + (NSString *)timeFormatConvertToSeconds:(NSString *)timeSecs
    {
        int totalSeconds=[timeSecs intValue];
    
        int seconds = totalSeconds % 60;
        int minutes = (totalSeconds / 60) % 60;
        int hours = totalSeconds / 3600;
    
        return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds];
    }
    
    0 讨论(0)
提交回复
热议问题