Мы знаем, что NSDate - это UTC / GMT. Другими словами, с ним не связана никакая информация о часовом поясе.
Существуют классы высокого уровня, такие как NSCalendar, NSTimeZone и NSDateComponents, которые учитывают часовой пояс.
Исходя из этого, я использую следующий код для вычисления разницы в днях между двумя датами. Однако результат, который я получаю, кажется, так как расчет выполняется без учета времени. Мне интересно, делаю ли я что-то не так или это по какой-то причине задумано.
Вот код и данные:
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
Часовой пояс - стандартное тихоокеанское время, а даты, указанные выше, преобразованы в стандартное тихоокеанское время:
startDate = 2011-03-31 8:52:13 -7
stopDate = 2011-04-03 8:52:13 -7
Поэтому я бы ожидал, что между ними будет 4 дня, а не 2 (31-е, 1-е, 2-е и 3-е).
Я думаю, что часы игнорируются, потому что если добавить часы к вычислениям, мы получим 2 дня и 12 часов.
Я что-то делаю не так или это так, как задумано?
Спасибо, Вэнс