我想要计算出一个月内的星期。我找到在IOS5实现的方法了,但是在IOS6中不知道应该怎么办?
- (int)weeksOfMonth:(int)month inYear:(int)year
{
NSCalendar *cCalendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setMonth:month];
[components setYear:year];
NSRange range = [cCalendar rangeOfUnit:NSDayCalendarUnit
inUnit:NSMonthCalendarUnit
forDate:[cCalendar dateFromComponents:components]];
cCalendar = [NSCalendar currentCalendar];
[cCalendar setMinimumDaysInFirstWeek:4];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier:@"fr"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSMutableSet *weeks = [[NSMutableSet alloc] init ];
for(int i = 0; i < range.length; i++)
{
NSString *temp = [NSString stringWithFormat:@"%4d-%2d- %2d",year,month,range.location+i];
NSDate *date = [dateFormatter dateFromString:temp ];
int week = [[cCalendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear];
[weeks addObject:[NSNumber numberWithInt:week]];
}
return [weeks count];
}
结果在ios5中返回了5,在ios6中返回了6,这应该怎么解决?
我更新XCode后没有IOS5了,但是我不知道你有没有看这段代码。这段代码的意思也就是说循环遍历当前月的每一日,取每一日所在在年周数放入set中。
比如3月份,3月1号是2013年第9周,而三月31号是2013年第14周,也就说的确是6周。
我觉得Ios5中返回5的原因可能是个系统bug被修复了。
------------------------------------
当然还有种方法:
[cCalendar setMinimumDaysInFirstWeek:4];//通过这个参数设置首周的长度
int week = [[cCalendar components: NSWeekOfMonthCalendarUnit fromDate:date] weekOfMonth];//通过这个算当前日在周号
比如说首周长度为4的时候,周号为{0,1,2,3,4,5}
比如说首周长度为1的时候,周号为{1,2,3,4,5,6}
然后自己做判断,过虑周号为0的周,这样就返回5了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。