Cadena de formatting iOS en minutos y segundos

Recibo una secuencia del API de YouTube JSONC, pero la duración viene como un número completo, es decir, 2321 en lugar de 23:21 o 2 en lugar de 0:02. ¿Cómo iba a arreglar esto?

JSON C

EDITAR:

int duration = [videos valueForKey:@"duration"]; int minutes = duration / 60; int seconds = duration % 60; NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 

Suponiendo que el valor de la duración es realmente la duración en segundos, puede calcular la cantidad de minutos y segundos y luego formatearlos en una cadena.

 int duration = ... // some duration from the JSON int minutes = duration / 60; int seconds = duration % 60; NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 

Prueba esto muy optimizado

 + (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]; } 

Debe usar DateComponentsFormatter si la duración está destinada a ser cara a cara del usuario:

 let formatter = DateComponentsFormatter() formatter.allowedUnits = [ .minute, .second ] formatter.zeroFormattingBehavior = [ .pad ] let formattedDuration = formatter.string(from: duration)! 
 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); 

Aquí está el gran código que encuentro para esto

 int duration = 1221; int minutes = floor(duration/60) int seconds = round(duration - (minutes * 60)) NSString * timeStr = [NSString stringWithFormat:@"%i:%i",minutes,seconds]; NSLog(@"Dilip timeStr : %@",timeStr); 

Y la salida se llamará así

 Dilip timeStr : 20:21 

Puede subString el 2321 y get la primera cadena como 23 y la segunda como 21 y convertirlos a int . También verifique la longitud del text:

 if (text.length < 4) //add zeros on the left of String until be of length 4