2012-08-02 205 views
0

我正在通過Objective-C編程中的一項挑戰,大書呆子牧場指南,而且我受到挑戰中的一個困惑。如何計算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

[減去2個的NSDate對象]的可能重複(http://stackoverflow.com/questions/6306661/subtracting-two-nsdate-objects) – 2012-08-02 17:04:29

+0

@JamesBlack:這看起來像是重複的差異位,但不是最初的「什麼是日曆」位。 – 2012-08-02 17:08:52

回答

3

示例代碼然後使用g變量來獲取日期。在另一種語言中,這將與DateDiff(dateOne,dateTwo,interval)一樣簡單。我不清楚爲什麼Calendar對象首先是必需的,爲什麼我們必須創建日期組件來提供對象。

我不是Objective-C程序員,但我知道一些關於日期/時間的API。

爲了指定你的出生日期/時間,你給一年的1981年,一個月的7等等。1981年是什麼意思?對你來說,這可能意味着大約31年前......但對於使用不同日曆系統的人來說,這可能意味着完全不同的東西。從「年/月/日等」轉換爲「即時」有點像從字符串轉換爲整數:「10」是指十或十六?這一切都取決於你的參考框架(基礎,在這種情況下 - 日期情況下的日曆系統)。

日曆 - 初始化爲公曆 - 採用這些日期組件,並且能夠及時給你回NSDate,這是一種「絕對」價值。

至於計算兩個NSDate值之間的差異 - 我懷疑有一個成員會給你類似「自Unix紀元以來的秒數」(或可能的毫秒)。因此,從兩個日期(你的出生時間和「現在」)開始,從另一箇中減去一個,然後你會得到二者之間經過的秒數(或毫秒)。

編輯:事實上,timeIntervalSinceNow函數可能是你想要的,一旦你有你的出生日期。

+0

謝謝!我明白。在過去,我經歷了所有這些麻煩似乎很奇怪,我使用了一個帶有三個參數的簡單函數:現在,然後和間隔類型! – Mohamad 2012-08-02 17:10:35

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 ]; 
相關問題