2012-08-02 4 views
0

저는 Objective-C Programming의 The Big Nerd Ranch Guide에 도전하고 있습니다. 도전 과제 중 하나에 약간의 난처함이 있습니다.Objective-C에서 두 날짜의 차이를 어떻게 계산합니까?

NSDate의 두 인스턴스를 사용하여 수명이 몇 초인지 알아냅니다. 힌트 : 다음은 연도, 월 등에서 새 날짜 개체를 만드는 방법입니다. :

그래서 지금 생년월일과 초 차이가 있어야합니다. 좋은 소리. 그런 다음 힌트가 나타납니다 :

@autoreleasepool { 
    NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setYear:1981]; 
    [comps setMonth:7]; 
    [comps setDay:12]; 
    [comps setHour:1]; 
    [comps setMinute:55]; 
    [comps setSecond:33]; 

    NSCalendar *g = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

    NSDate *dateOfBirth = [g dateFromComponents:comps]; 

첫 번째 문제는 내가 *g이 될 무엇을 의미하는지 이해하지 못하는 것입니다. NSCalendar 객체에 대한 포인터라는 것을 알고 있습니다. 그런데 왜 우리는 그것을 필요로합니까? g은 무엇을 의미합니까?

예제 코드에서는 g 변수를 사용하여 날짜를 가져옵니다. 다른 언어에서는 DateDiff(dateOne, dateTwo, interval)처럼 쉬울 것입니다. Calendar 객체가 왜 필요한지, 왜 객체를 공급할 날짜 구성 요소를 만들어야하는지에 대해서는 분명하지 않습니다.

이 모든 것이 나에게는 새롭고 과거에는 동적 언어로 작업했습니다. 그래서 설명 같은 "인형들"은 위대 할 것입니다!

+0

[이있는 NSDate 객체를 빼면]의 중복 가능성 (http://stackoverflow.com/questions/6306661/subtracting-two-nsdate-objects) –

+0

@JamesBlack : 차이 비트의 복제본처럼 보이지만 처음에는 "무엇을위한 달력"비트가 아닙니다. –

답변

3

샘플 코드는 g 변수를 사용하여 날짜를 잡습니다. 다른 언어에서는 DateDiff (dateOne, dateTwo, interval)만큼 쉽습니다. Calendar 객체가 왜 필요한지, 왜 객체를 공급할 날짜 구성 요소를 만들어야하는지에 대해서는 분명하지 않습니다.

저는 Objective-C 프로그래머가 아니지만 날짜/시간 API에 대해 조금 알고 있습니다.

출생 날짜/시간을 지정하려면 1981 년, 7 개월 등을 지정해야합니다. 1981 년은 무엇을 의미합니까? 당신에게 그것은 약 31 년 전일 수도 있지만, 다른 달력 시스템을 사용하는 사람에게는 완전히 다른 것을 의미 할 수 있습니다. "년/월/일 등"에서 "시점"으로 변환하는 것은 문자열에서 정수로 변환하는 것과 조금 비슷합니다. "10"은 10 또는 16을 의미합니까? 이 모든 것은 참조 프레임 (이 경우 기본 날짜 시스템의 달력 시스템)에 따라 다릅니다.

달력은 그레고리오 력으로 초기화되며 해당 날짜 구성 요소를 사용하여 일종의 "절대"값인 NSDate을 다시 제공 할 수 있습니다.

두 개의 NSDate 값의 차이를 계산하는 방법은 "Unix epoch 이후 초"(또는 가능한 밀리 초)와 같은 것을 제공하는 회원이 있다고 의심됩니다. 그래서 두 날짜 (당신의 출생과 "지금")에서 가져와 다른 하나를 뺍니다. 둘 사이에 경과 된 초 수 (또는 밀리 초)가 표시됩니다.

편집 사실 생년월일이되면 timeIntervalSinceNow 기능이 아마도 원하는 기능 일 것입니다.

+0

감사! 이해 했어. 과거에 나는 세 가지의 인자를 취한 간단한 함수를 사용 했었습니다 : now, then 그리고 interval 타입! – Mohamad

3

당신은 이런 식으로 할 수

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:1981]; 
[comps setMonth:7]; 
[comps setDay:12]; 
[comps setHour:1]; 
[comps setMinute:55]; 
[comps setSecond:33]; 

NSDate *dateOfBirth = [[NSCalendar currentCalendar] dateFromComponents:comps]; 


NSTimeInterval timeGap=[[NSDate new] timeIntervalSinceDate:dateOfBirth ]; 
관련 문제