NSDateComponents играет на симуляторе - PullRequest
0 голосов
/ 31 января 2012

У меня есть следующий код. Когда я запускаю его на своем устройстве iOS 3.1.3 (прекратите!), Он работает как положено, но когда я запускаю его на симуляторе (iOS 5 и 4.3), он отключается на 1 минуту и ​​15 секунд (9:01:15) ). Это из-за моего кода, ошибки в симуляторе или ошибки в iOS 4+?

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]];
components.hour = 9;
components.minute = 0;
NSDate *date = [calendar dateFromComponents:components]; // <-- date is off on simulator

Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 06 февраля 2012

Я не до конца понимаю, почему это так, но это происходит, когда вы используете dateFromComponents: для создания дат давным-давно. В частности, отсечение, по-видимому, 1 декабря 1847 года. Все, что раньше 12:00 в этот день, похоже, в конечном итоге было 1 минута 15 секунд.

В вашем случае это происходит потому, что если вы установите только components.hour и components.minute, вы получите дату с 1 января, 1AD.

Если вы установите год, месяц и дату для чего-то более нового, например:

components.year = 2012;
components.month = 2;
components.day = 6;

Тогда вы получите правильный вывод (что я получил в симуляторе iOS):

2012-02-06 09:00:00 +0000
...