我想在NSDateComponents类中获得四分之一的值

我想从指定的date获得四分之一的价值。 (*datevariables)

所以。 我已经做了下面的代码并运行。 但是,季度值是零。

为什么季度价值为零? 问题在哪里?

请先进的人的build议。

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 

看起来有一个NSQuarterCalendarUnit被忽略的问题(没有validation,但确实看到一个错误报告)。 无论如何,它足够简单,只要使用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); 

应该工作正常…

2014年12月16日

简单地说:

([comp2 month] -1)/ 3 + 1;