2012-02-14 14 views
1

XcodeとObjective-Cを使ってiOSをプログラミングするのは比較的新しいです。"3:31" mm:ssを文字列から秒を表す整数に変換する

文字列の長さを秒に相当する整数に変換する必要があります。たとえば、曲の長さを変換する必要があります。だから3:31(mm:ss)は211秒、211から3:31に戻ります。

私の手助けを得るための助けがあれば幸いです。

+0

長さ60分以上の曲はどうですか? – sch

答えて

7

でないすべての偉大なものについての詳細を取得することができます:

int songLength = 211; 
int minutes = songLength/60; 
int seconds = songLength % 60; 
NSString *lengthString = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 

%02d0の使用は、この188のような値は、3:08の代わりに、3に変換可能:8あなたは秒取得するNSDateFormatterを使用することができます

時刻文字列からND分:

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; 

編集:追加時間

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

そして

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; 
+0

うわー、私はこの種の回りを期待していませんでした。私はこの解決策が好きですが、カーブボールを持っています。 3600秒(1時間)を超えるとどうなりますか?コードは60時を示す素晴らしい動作しますが、何時間もあればどうなりますか?たとえば、4657は1:17:37を返します。おそらくこれをやる方法がたくさんあることは分かっていますが、何がベストですか? –

+0

時間を追加するために私の答えを編集しました。 – sch

+0

曲の長さから3600を引く(または少なくとも3600> 3600かどうかを確認してください)、次に時間があり、上に掲載されている分と秒がある場合は、数秒から数時間に変換する最良の方法はありますか?ありがとうございます - ポール –

7

あなたは:で文字列を分割し、このような結果を計算することができますバック値をフォーマットするには

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

[NSString stringWithFormat:@"%d:%02d", lengthInSeconds/60, lengthInSeconds % 60]; 
+2

あなたのコードは後方だと思います。あなたは秒を最初に読み終え、次に2番目の反復でそれに60を掛けて分を加えます。 – Alex

+0

"%d:%2d"の代わりに "%d:%02d"を使用して文字列を整形する方が良いと思います。 – sch

+0

@Alexあなたは正しいですし、宣言されていない変数もあります!訂正してくれてありがとう。 – dasblinkenlight

1

NSStringのはこれで助けるための素晴らしい方法のトンを持っているを使用します物のタイプ。

その後、intValueでint型に文字列を変換あなたの分と秒

NSArray *listItems = [list componentsSeparatedByString:@":"]; 

を分割するcomponentsSeperatedByStringを使用することができます。

最後に、分を秒に変換してすべて追加します。

あなたはNSStringのは、あなたが、あなたは以下のコードを使用することができます説明した文字列に時間を秒単位で変換するには、クラスのrefernce (NSString Reference)

0

これは私が長い間を変換するために、私のアプリの一つに使用する方式であります〜mm:ss形式:

long seconds = //anything; 
NSString *output = [NSString stringWithFormat:@"%02lu:%02lu",seconds/60,seconds-(seconds/60)*60]; 
あなたはちょうど私がこれを気に入ってた形式でLUを交換する必要がint型使用している場合

[NSString stringWithFormat:@"%02i:%02i",seconds/60,seconds-(seconds/60)*60]; 

02、出力は常に2桁の長さであることを確認します。 65秒は01:05と表示されます。 %i:%iをフォーマットで使用する場合、65秒間の出力は1:5のようになり、どのように見たいかはわかりません。

関連する問題