NSDate が UTC/GMT であることはわかっています。つまり、タイムゾーン情報は関連付けられていません。
タイムゾーンを考慮に入れる NSCalendar や NSTimeZone 、NSDateComponents などの高レベルのクラスがあります。
それに基づいて、次のコードを使用して、2 つの日付間の日数の差を計算しています。しかし、私が得ている結果は、時間を完全に無視して計算が行われたようです。私が何か間違ったことをしているのか、それともこれが何らかの理由で設計されているのか疑問に思っています.
コードとデータは次のとおりです。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar components:NSDayCalendarUnit fromDate:startDate toDate:stopDate options:0];
NSInteger day = [comp day];
デバッグ出力:
(gdb) po startDate
2011-04-01 03:52:13 +0000
(gdb) po stopDate
2011-04-03 15:52:13 +0000
(gdb) p (int) day
$1 = 2
タイムゾーンは太平洋標準時で、上記の日付は PST に変換されたものです。
startDate = 2011-03-31 8:52:13 -7
stopDate = 2011-04-03 8:52:13 -7
したがって、それらの間に 2 日ではなく 4 日あると予想します (31 日、1 日、2 日、および 3 日)。
時間が無視される理由は、計算に時間を追加すると 2 日と 12 時間が得られるからです。
私は何か間違ったことをしていますか、それともこれがどのように機能するように設計されていますか?
ありがとう、ヴァンス