如何将"3:31"mm:ss从字符串转换为表示秒的整数

Pau*_* S. 1 objective-c ios xcode4.2

我使用Xcode和Objective-C对iOS编程相对较新.

我需要能够将歌曲的长度(例如3:31)转换为表示秒的整数.所以3:31(mm:ss)将是211秒,然后从211回到3:31.

任何帮助我开始的帮助将不胜感激.

das*_*ght 7

您可以将字符串拆分为:,并计算结果,如下所示:

NSArray* tokens = [lengthStr componentsSeparatedByString:@":"];
NSUInteger lengthInSeconds = 0;
for (int i = 0 ; i != tokens.count ; i++) {
    lengthInSeconds = 60*lengthInSeconds + [[tokens objectAtIndex:i] integerValue];
}
Run Code Online (Sandbox Code Playgroud)

要重新格式化值,请使用

[NSString stringWithFormat:@"%d:%02d", lengthInSeconds / 60, lengthInSeconds % 60];
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的代码是倒退的.您最终将首先读取秒数,然后在第二次迭代时将其乘以60并添加分钟值. (2认同)

sch*_*sch 7

要将时间(以秒为单位)转换为您描述的字符串,可以使用以下代码:

int songLength = 211;
int minutes = songLength / 60;
int seconds = songLength % 60;
NSString *lengthString = [NSString stringWithFormat:@"%d:%02d", minutes, seconds];
Run Code Online (Sandbox Code Playgroud)

注意使用0in %02d这使得像188这样的值转换为3:08而不是3:8.

您可以使用NSDateFormatter从时间字符串中获取秒和分钟:

NSString *timeString = @"3:31";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"mm:ss";
NSDate *timeDate = [formatter dateFromString:timeString];

formatter.dateFormat = @"mm";
int minutes = [[formatter stringFromDate:timeDate] intValue];
formatter.dateFormat = @"ss";
int seconds = [[formatter stringFromDate:timeDate] intValue];

int timeInSeconds = seconds + minutes * 60;
Run Code Online (Sandbox Code Playgroud)

编辑:添加小时数

int songLength = 4657;
int hours = songLength / 3600;
int minutes = (songLength % 3600) / 60;
int seconds = songLength % 60;
NSString *lengthString = [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds];
Run Code Online (Sandbox Code Playgroud)

NSString *timeString = @"2:3:31";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"hh:mm:ss";
NSDate *timeDate = [formatter dateFromString:timeString];

formatter.dateFormat = @"hh";
int hours = [[formatter stringFromDate:timeDate] intValue];
formatter.dateFormat = @"hh";
int minutes = [[formatter stringFromDate:timeDate] intValue];
formatter.dateFormat = @"ss";
int seconds = [[formatter stringFromDate:timeDate] intValue];

int timeInSeconds = seconds + minutes * 60 + hours * 3600;
Run Code Online (Sandbox Code Playgroud)