2013-02-27 16 views
12

Ricevo una stringa da YouTube JSONC api, ma la durata è in arrivo come numero intero i.e 2321 anziché 23:21 o 2 anziché 0:02. Come andrei a risolvere questo?Formato iOS Stringa in minuti e secondi

JSON C

EDIT:

int duration = [videos valueForKey:@"duration"]; 
int minutes = duration/60; 
int seconds = duration % 60; 

NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 
+0

Sei sicuro che il numero durata non è il numero di secondi? Quindi 2321 sono davvero 38 minuti e 41 secondi? – rmaddy

+0

Si scopre che sono corretto. Il valore della durata è il numero di secondi. Quindi 2321 sono 2321 secondi o 38 minuti e 41 secondi o 38:41. Vedi la mia risposta qui sotto. – rmaddy

risposta

22

Supponendo che il valore di durata è in realtà la durata in secondi, quindi è possibile calcolare il numero di minuti e secondi e poi formattare quelli in una stringa.

int duration = ... // some duration from the JSON 
int minutes = duration/60; 
int seconds = duration % 60; 

NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 
+0

Ovviamente l'ora sta sbagliando. Senza vedere il tuo codice reale non c'è modo di sapere cosa c'è di sbagliato. Ma molto probabilmente il tuo valore 'duration' inizia con il valore sbagliato. – rmaddy

+0

il valore della durata proviene direttamente dal feed di YouTube – SquiresSquire

+0

Hai qualcosa di sbagliato. Verificare 'duration' è davvero il valore giusto. Se necessario, inserisci il tuo codice effettivo per ottenere il valore della durata e calcolare ora e minuto. – rmaddy

0

È possibile subString il 2321 e ottenere la prima stringa come 23 e il secondo come 21 e convertirli in int. Controllare anche per la lunghezza del testo:

if (text.length < 4) 
    //add zeros on the left of String until be of length 4 
2
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

Ho trovato la sintassi di formattazione condizionale qui particolarmente utile. Nello specifico: [anni> 0? @"S" : @""] –

1

Here è il grande codice che trova per questo

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); 

E l'uscita sarà belike questo

Dilip timeStr : 20:21 
6

Prova questa molto ottimizzato

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

Si dovrebbe usare DateComponentsFormatter se la durata è destinato ad essere user-facing:

let formatter = DateComponentsFormatter() 
formatter.allowedUnits = [ .minute, .second ] 
formatter.zeroFormattingBehavior = [ .pad ] 
let formattedDuration = formatter.string(from: duration)! 
Problemi correlati