2012-02-14 3 views
1

Xcode 및 Objective-C를 사용하여 iOS 용 프로그래밍을 처음 사용하는 경우는 비교적 새로운 기능입니다."3:31"mm : ss를 문자열에서 초를 나타내는 정수로 변환

문자열의 길이를 초를 나타내는 정수로 변환하는 3:31과 같이 노래의 길이를 변환 할 수 있어야합니다. 그래서 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]; 

참고 %02d에서 0의 사용이 188과 같은 값이 3시 8분 대신 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; 

편집 : 추가 시간

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 시가 넘는 훌륭한 결과를 보여 주지만 1 시간 이상이되면 어떨까요? 예 : 4657은 1:17:37을 반환해야합니다. 아마도이 작업을 수행 할 수있는 많은 방법이있을 것입니다.하지만 최선의 방법은 무엇입니까? –

+0

시간을 추가 할 내 대답을 편집했습니다. – sch

+0

송 시간 길이에서 3600을 뺀 (또는 적어도 3600> 이상인지 확인한 다음) 몇 시간에서 몇 시간으로 변환 한 다음 시간과 분 및 초를 위에 게시 한 경우 가장 좋은 방법이 될까요? 고마워 - Paul –

7

:있는 NSString이에 도움이 훌륭한 방법의 톤을 가지고

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

코드가 거꾸로 생각됩니다.결국 초를 읽은 다음 두 번째 반복에서 60을 곱하고 분 값을 더합니다. – Alex

+0

"% d : % 2d"대신 "% d : % 02d"를 사용하여 문자열의 서식을 지정하는 것이 더 좋습니다. – sch

+0

@Alex 당신 말이 맞아요. 선언되지 않은 변수도 있습니다! 수정 해줘서 고마워. – dasblinkenlight

1

를 사용

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

이 값을 다시 포맷하기를 물건의 종류.

그런 다음있는 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 출력은 항상 두 자리임을 확인합니다. 65 초가 01:05으로 표시됩니다. 형식에서 % i : % i를 사용하면 65 초 동안의 출력은 1:5과 같이 보일 것입니다.