Строка формата iOS в минутах и ​​секундах

Я получаю строку из API YouTube JSONC, но продолжительность отображается как полное число, т.е. 2321 вместо 23:21 или 2 вместо 0:02. Как мне это исправить?

JSON C

ИЗМЕНИТЬ:

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

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

person SquiresSquire    schedule 27.02.2013    source источник
comment
Вы уверены, что число продолжительности не является количеством секунд? Так 2321 на самом деле 38 минут и 41 секунда?   -  person rmaddy    schedule 28.02.2013
comment
Оказывается, я прав. Значение продолжительности — это количество секунд. Итак, 2321 — это 2321 секунда или 38 минут и 41 секунда или 38:41. Смотрите мой ответ ниже.   -  person rmaddy    schedule 28.02.2013


Ответы (7)


Предполагая, что значение продолжительности действительно равно продолжительности в секундах, вы можете рассчитать количество минут и секунд, а затем отформатировать их в строку.

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

NSString *time = [NSString stringWithFormat:@"%d:%02d", minutes, seconds];
person rmaddy    schedule 27.02.2013
comment
Очевидно, час идет неправильно. Не видя вашего фактического кода, невозможно узнать, что не так. Но, скорее всего, ваше значение duration начинается с неправильного значения. - person rmaddy; 28.02.2013
comment
значение продолжительности поступает прямо из канала YouTube - person SquiresSquire; 28.02.2013
comment
У вас что-то не так. Убедитесь, что duration действительно правильное значение. При необходимости разместите свой фактический код для получения значения продолжительности и расчета часов и минут. - person rmaddy; 28.02.2013
comment
Изменить [videos valueForKey:@"duration"]; на [[videos objectForKey:@"duration"] intValue]; - person rmaddy; 04.03.2013
comment
Это самое чистое и простое решение на сегодняшний день. - person CIFilter; 21.01.2017

Вы должны использовать DateComponentsFormatter, если продолжительность предназначена для взаимодействия с пользователем:

let formatter = DateComponentsFormatter()
formatter.allowedUnits = [ .minute, .second ]
formatter.zeroFormattingBehavior = [ .pad ]
let formattedDuration = formatter.string(from: duration)!
person Niels    schedule 21.03.2017

Попробуйте это очень оптимизированное

+ (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];
}
person codercat    schedule 26.08.2014

Вот отличный код, который я нашел для этого

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

И вывод будет таким

Dilip timeStr : 20:21
person Dilip    schedule 02.12.2013

Вы можете subString 2321 и получить первую строку как 23, а вторую как 21 и преобразовать их в int. Также проверьте длину текста:

if (text.length < 4)
   //add zeros on the left of String until be of length 4
person Hossam Ghareeb    schedule 27.02.2013

Цель С:

NSDateComponentsFormatter * formatter = [[NSDateComponentsFormatter alloc]init];
[formatter setUnitsStyle:NSDateComponentsFormatterUnitsStyleShort];
[formatter setAllowedUnits:NSCalendarUnitSecond | NSCalendarUnitMinute];
[formatter setZeroFormattingBehavior:NSDateComponentsFormatterZeroFormattingBehaviorPad];
return [formatter stringFromTimeInterval:duration];
person Ofir Malachi    schedule 26.08.2019

person    schedule
comment
Я нашел здесь синтаксис условного форматирования особенно полезным. В частности: [лет › 0 ? @s : @] - person Jason R. Escamilla; 10.04.2014