NSCalendar дата ошибка

Я пытаюсь использоватьNSCalendar с участиемNSIslamicCalendar идентификатор. Но результат дня не очень хороший, это мой код:

NSCalendar *calandar = [[NSCalendar alloc]initWithCalendarIdentifier:NSIslamicCalendar];    
NSDateComponents *components = [calandar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [components day];
NSInteger theMonth = [components month];
NSInteger theYear = [components year];


[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate *thisDate = [calandar dateFromComponents:components];    
NSLog(@"year=%i month=%i day=%i",theYear,theMonth,theDay);
NSLog(@"thisdate = %@", [thisDate description]);


NSString *strDate = [NSString stringWithFormat:@"%i-%i-%i",theYear,theMonth,theDay];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *datee = [formatter dateFromString:strDate];
NSLog(@"datee = %@", [datee description]);

журналы:

year=1434 month=2 day=28              ----> all good (it's islamic calandar)
thisdate = 2013-01-09 23:00:00 +0000  ----> not good (we are in 2013-01-10 not 09).
datee = 1434-02-27 23:19:16 +0000     ----> not good (we are in 1434-02-28 not 27)

Как вы можете видеть, первая дата правильная, а не две другие, а также время не правильное (когда я компилирую, оно около 14:20), и оно отличается между последними 2 последними журналами (23:00:00 против 23:19: 16).

этот код находится в моей viewDidload: функция и никакой другой код не выполняется до или после.

Также, если я хочу узнать количество дней в месяце, я получу еще один день:

NSCalendar *c = [[NSCalendar alloc]initWithCalendarIdentifier:NSIslamicCalendar];
NSRange dayRange = [c rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
NSLog(@"dayRange.length = %i",dayRange.length);

журнал:

dayRange.length = 30 -----> but this islamic month have 29 day not 30.

в чем проблема и как я могу это исправить? благодарю вас.

Редактировать:

похоже, то же самое дляNSGregorianCalendar с одной разницей, что количество дней верно. войти используяNSGregorianCalendar

 year=2013 month=1 day=10                -----> all good
 thisdate = 2013-01-09 23:00:00 +0000    -----> not good
 datee = 2013-01-09 23:00:00 +0000       -----> not good

 dayRange.length = 31 ------------------------> all good

Ответы на вопрос(3)

Ваш ответ на вопрос