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