NSCalendar,为什么设置第一个星期不影响计算结果?
我需要计算给定date的工作日,但是,根据日历,星期一可以星期一星期日星期日
所以我想设置它,从星期一开始,使用
[[NSCalendar currentCalendar] setFirstWeekday:2];
但是,计算结果是一样的
{ [[NSCalendar currentCalendar] setFirstWeekday:1]; NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; NSInteger weekday = [weekdayComponents weekday] - 1; NSLog(@"%d", weekday); } { [[NSCalendar currentCalendar] setFirstWeekday:2]; NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; NSInteger weekday = [weekdayComponents weekday] - 1; NSLog(@"%d", weekday); }
返回相同的数字,但是为什么?
你看到的行为是正确的。 weekday组件不受firstWeekday属性的影响。 如果你有一个代表星期天的date,那么星期天或星期一开始你的星期将永远是星期天。 这应该会影响您date组件的星期属性中的星期数。
我相信你需要使用ordinalityOfUnit:inUnit:forDate:
方法,而不是试图提取date组件。 所以像这样的东西:
NSUInteger weekday = [[NSCalendar currentCalendar] ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];
基本上这个调用要求在给定date的一周( NSWeekCalendarUnit
)中的一天( NSWeekCalendarUnit
)。
如果这不起作用,则可能需要创build自己的日历,而不是尝试修改currentCalendar
上的第一个星期。
例如:
NSCalendarIdentifier calendarIdentifier = [[NSCalendar currentCalendar] calendarIdentifier]; NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier] autorelease]; [calendar setFirstWeekday:2];
然后在ordinalityOfUnit:inUnit:forDate:
call中使用新的calendar
对象,而不是[NSCalendar currentCalendar]
。
- 在Grand Central Dispatch中使用dispatch_sync
- 代表 – 保留或分配 – 释放?
- 通过USB电缆在iOS应用程序和Mac应用程序之间交换数据
- 检测UISlider的触摸?
- 如何获得cocoa的形象作者
- dynamic插入更多的UITextFields
- iOS版。 通过IP在同一本地networking中获取其他设备/计算机名称
- NSString boundingRectWithSize返回不必要的高度
- xcodebuild:cdtool无法编译:DataModelCompile /path/to/coredatamodel.xcdatamodeld dyld:找不到符号:_OBJC_CLASS _ $ _ OS_object