Я хочу получить четверть значения в классе NSDateComponents
Я хочу получить значение четверти от указанной даты. (* переменная даты)
Так. Я сделал следующий код и запустить. но квартальная стоимость равна нулю.
Почему четверть равна нулю? где проблема?
Пожалуйста, совет от продвинутого человека.
NSDateComponents *comp1 = [[NSDateComponents alloc] init];
[comp1 setYear:2012];
[comp1 setMonth:6];
[comp1 setDay:1];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comp1]; <== want to get a quarter value.
unsigned int unitFlags = NSYearCalendarUnit | NSQuarterCalendarUnit | NSMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *comp2 = [gregorian components:unitFlags fromDate:date];
NSLog(@"year : %5d",[comp2 year]);
NSLog(@"quarter : %5d",[comp2 quarter]);
NSLog(@"month : %5d",[comp2 month]);
NSLog(@"weekofYear : %5d",[comp2 weekOfYear]);
NSLog(@"day : %5d",[comp2 day]);
Результат:
2012-07-24 03:44:14.776 dateTest[1228:1307] year : 2012
2012-07-24 03:44:14.776 dateTest[1228:1307] quarter : 0
2012-07-24 03:44:14.777 dateTest[1228:1307] month : 6
2012-07-24 03:44:14.777 dateTest[1228:1307] weekofYear : 22
2012-07-24 03:44:14.778 dateTest[1228:1307] day : 1
2 ответа
Решение
Кажется, что есть проблема с игнорируемым NSQuarterCalendarUnit (не проверено, но действительно обнаружило сообщение об ошибке). Во всяком случае, это достаточно просто обойти... Просто используйте класс NSDateFormatter.
// After your NSDate *date, add...
NSDateFormatter *quarterOnly = [[NSDateFormatter alloc]init];
[quarterOnly setDateFormat:@"Q"];
int quarter = [[quarterOnly stringFromDate:date] intValue];
// Then change the quarter NSLog too
NSLog(@"quarter : %5d", quarter);
Должно работать нормально...
16 декабря 2014 г.
Как насчет просто:
([comp2 month] -1) / 3 + 1;