2012-01-30 5 views
0

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

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 

Благодарим за помощь!

ответ

2

Я не совсем понимаю, почему это так, но это происходит, когда вы используете dateFromComponents: для создания дат с очень давнего времён. В частности, обрезание, похоже, 1 декабря 1847 года. Кажется, что раньше, чем в 12 утра в этот день, было 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 
+0

Ах, это исправляет. Благодаря! – jrtc27

+1

Может быть, потому что (согласно Википедии) это было, когда компании перешли на стандартное время в Великобритании (http://en.wikipedia.org/wiki/Railway_time#Great_Britain). – jrtc27

+0

Упс - забыл принять ваш ответ! – jrtc27

Смежные вопросы