2014-05-09 59 views
0

我想從一個日期計算天數到另一個發現這樣做有兩種方式。NSDateComponents VS timeIntervalSince

第一種使用NSDateComponents如下:

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                fromDate:date1 
                 toDate:date2 
                options:0]; 

,然後檢查該[元件日]。

第二種方法是使用一個時間間隔:

NSInteger timeInterval = [date2 timeIntervalSinceDate:date1]; 

,然後讓一個時間間隔/24分之3600

是一種方法比其他(或許是因爲同一個時間間隔方法缺乏精度)更好嗎?

謝謝!

回答

1

使用dateComponent遠遠優於操控自己假設timeInterval/3600/24

原因:

  1. 所有天數沒有60 * 60 *24秒!

  2. 雖然從日光節約過渡時間,其中一天能有23或25小時。

的小時(通用符號:H或hr)是時間的測量單位。在 現代用法,一小時包括60分鐘,或3600秒1.5大約是平均太陽日的1/24,這是 。

通用協調時間(UTC)時間標準中的一小時 包含負閏秒或正閏秒,並且因此可能具有用於調整目的的3,599或3,601秒的 持續時間。

來源:Wikipedia Hour

+2

閏秒是*不是你應該使用NSDateComponents的原因,因爲Unix時間不計算閏秒。 Unix時間號每小時增加3600。 - 真正的原因是從夏令時轉換到夏令時,一天可能有23或25小時。 –

+0

感謝你們兩位!正確對待DST。 – sternhenri