2016-01-09 98 views
0

我使用下面的代碼獲取當前日期:如何獲取當前日期

-(NSDate*) timeStampDate { 
    NSDate* currentDate = [NSDate date]; 

    return [NSDate dateWithTimeInterval: 
      [[NSTimeZone defaultTimeZone] secondsFromGMTForDate: currentDate] 
           sinceDate: currentDate]; 
} 

當我在節能立即顯示此日期,使用category是把它簡單易懂的英語,它給了我「5小時前」。因爲我在紐約,這表明日期實際上是格林威治日期。任何人都可以請向我解釋上面的代碼是真的在做什麼。

回答

2

你得到的當前日期:[NSDate date]

那麼你得到的默認時區和GMT之間的秒數,在該日期:[[NSTimeZone defaultTimeZone] secondsFromGMTForDate: currentDate]

然後你計算一個新的日期是是當前日期+那些秒。間隔爲負值,因此您計算的是過去的日期:[NSDate dateWithTimerInterval:-seconds sinceDate:currentDate

由於您的間隔爲-5小時,從現在開始減去,那麼您已計算出確實是「5小時前」的新日期。

如果你的目標是讓在格林尼治標準時間,我建議使用日期格式如圖所示,投票最高的答案在這裏:NSDate - Convert Date to GMT爲了得到這將正確地格式化的實際電流的日期

+0

所以時間在哪裏,我應該刪除時間間隔部分?格式化在轉換成簡單英文的類別中完成。 – user1904273

+1

'[NSDate date]'會爲您提供設備上設置的任何時區的當前時間。根據你所說的話,這聽起來就像你需要的一切。 – Thunk

0

我不明白爲什麼這個結果看起來不符合邏輯 - 你現在要求格林尼治標準時間爲你所在的時區,這是你說的大約五個小時。如果日期是「年紀大」,則秒數會更大。

所有NSDates都是獨立於任何特定時區而創建和生活的,但這並不重要。