2015-01-15 2 views
2

Пожалуйста, помогите мне с неочевидным поведением кодаНеверное форматирование даты?

NSCalendar *calendar = [NSCalendar currentCalendar]; 

NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
dateComponents.hour  = 15; 
dateComponents.minute = 20; 
dateComponents.calendar = calendar; 

NSDate * endDate = [calendar dateFromComponents:dateComponents]; 

EndDate является 0001-01-01 12:49:43 +0000. Зачем?

Значение часов может быть неправильным из-за разницы в часовых поясах. Почему такие странные минуты и секунды значения? С уважением.

+2

Если бы я должен был догадаться, я бы сказал, что это вызвано прыжковыми секундами, накопленными в вашем календаре с 01/01/0001, поэтому я постараюсь установить год. Но я просто сделал это, так что это может быть совершенно неправильно. –

+0

Интересно ... Вы можете распечатать свойства свойства часового пояса календаря, esp. 'secondsFromGMT' и' аббревиатура'. –

+0

@GuillaumeAlgis Хорошая идея! –

ответ

1

Если мы только учитывая следующий фрагмент кода

NSCalendar *calendar = [NSCalendar currentCalendar];   
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setCalendar:calendar]; 
NSDate *date = [calendar dateFromComponents:components]; 

date = 0000-12-31 23:06:32 +0000, потому что:

Календари инкапсулировать информацию о системах отсчета времени в которых начало, длина и делений год.

[...]

При наличии достаточных компонентов, предоставленных полностью определить абсолютное время, календарь использует значения своего выбора по умолчанию. Apple Documentation

и

NSDateComponents объект не имеет смысла сама по себе; вам нужно знать, в каком календаре оно интерпретируется, и вам нужно знать, являются ли значения абсолютными значениями единиц или количеством единиц. Apple Documentation

На самом деле все в порядке и точно в документации.

+1

Мы читаем документацию, но были сомнения в том, как это работает. Спасибо. –