2014-11-25 4 views
0

이 메서드는 문자열을 반환합니다. 하지만 초 값은 항상 0입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?0을 반환하는 NSCalendarUnitSecond

-(NSString*)secondsBetweenDate:(NSDate*)startDate andDate:(NSDate*)endDate { 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 

    NSDateComponents *difference = [calendar components:unitFlags fromDate:startDate toDate:endDate options:0]; 

    long hour = [difference hour]; 
    long min = [difference minute]; 
    long sec = [difference second]; 
    NSLog(@"Hour: %ld Min: %ld Sec: %ld", hour, min, sec); 
    return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", hour, min, sec]; 
} 
+0

어떤 날짜입니까? h, m 및 s를 요구하면 0 초의 차이를 나타내는 무한한 날짜가 있습니다. –

+0

두 날짜 사이의 시간을 보여주는 카운터입니다. 매 초마다 나는이 루틴을 호출하고 레이블을 새 시간으로 업데이트합니다. – Gerald

+0

timeToAlertBox.text = [self secondsBetweenDate : sarWatchStartTime andDate : sarWatchEndTime]; sarWatchEndTime은 sarWatchStartTime에서 미래 15 분입니다. – Gerald

답변

0

왜 기본 NSDate 차이 계산을 사용하지 않습니까? NSTimeInterval을 초 단위로 반환합니다.

typedef double NSTimeInterval; 설명 시간 (초)을 간격으로 지정하는 데 사용됩니다.

동작은 다음과 같습니다

[aDate timeIntervalSinceDate:anotherDate]; 
0

귀하의 코드가 정확한지. 실제로 초 값이 다른 날짜를 사용하면 예상 결과가 나타납니다.

[self secondsBetweenDate:[NSDate dateWithTimeIntervalSinceNow:-99999] andDate:[NSDate date]]; 

로그 :

Hour: 27 Min: 46 Sec: 39 

그리고 99999 초 * 60 +39

우리는 당신이 가지고 있다는 것을 발견 코멘트에 우리의 논의에서

27 * 60 * 60 + 46 개 개념적 문제. 카운트 다운 또는 스톱워치 유형 문자열을 표시해야하는 경우 현재 시간을 날짜 매개 변수 중 하나로 사용해야합니다.

그래서 당신은 (스톱워치 같은) 특정 날짜 이후에 경과 한 시간 사용 표시 할 경우 :

NSDate *now = [NSDate date]; 
string = [self secondsBetweenDate:yourStartDate andDate:now]; 

당신이 카운트 다운과 같은 특정 날짜까지의 시간을 (표시 할 경우를

날짜 형식을 사용하면 iOS 만 8을 표적으로하는 경우와 나중에는 NSDateComponentsFormatter를 사용할 수 있습니다

NSDate *now = [NSDate date]; 
string = [self secondsBetweenDate:now andDate:yourEndDate]; 

Btw는 :) 당신은 사용

NSDateComponentsFormatter *df = [[NSDateComponentsFormatter alloc] init]; 
df.unitsStyle = NSDateComponentsFormatterUnitsStylePositional; 
df.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
NSString *dateString = [df stringFromDate:startDate toDate:[NSDate date]];