[objective-c]我想要一个季度值在 NSDateComponents 类中

标签: ios Objective-C
发布时间: 2016/10/4 5:15:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要一个季度值从指定的日期。(* date 变量)

苏取得以下代码和运行的时候。 但是,季度值为零。

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

请咨询从先进的男人。

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

解决方法 1:

它似乎是被忽略的 NSQuarterCalendarUnit 的问题 (没有证实,但并未看到报告一个 bug)。 不管怎么说,这是很简单,要把...只是使用 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);

应该做工精细...

官方微信
官方QQ群
31647020