工作日的NSDateComponents没有显示正确的工作日?

Dav*_*vid 3 objective-c nsdate nsdatecomponents ios ios5

我得到了一个N​​SDate例如1/6 -12(星期五)并试图找出它的工作日.我的周从星期一开始,所以星期五应该是工作日5.

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [calendar setFirstWeekday:2];
    NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:firstOfJulyDate];
    NSLog(@"weekday %i",components.weekday);
Run Code Online (Sandbox Code Playgroud)

产出:工作日6

无论我设置setFirstWeekday到什么,输出将永远是6.我做错了什么?

Sim*_*iwi 9

尝试做这样的事情:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[gregorian setFirstWeekday:2]; // Sunday == 1, Saturday == 7
NSUInteger adjustedWeekdayOrdinal = [gregorian ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:[NSDate date]];
NSLog(@"Adjusted weekday ordinal: %d", adjustedWeekdayOrdinal);
Run Code Online (Sandbox Code Playgroud)


aba*_*ert 6

正如NSDateComponents的文档所说:

工作日单位是数字1到n,其中n是一周中的天数.例如,在公历中,n为7,星期日由1表示.

此值在使用它的日历的上下文中进行解释 - 请参阅"日期和时间编程指南"中的"日历,日期组件和日历单位".

如果您按照预期查看NSGregorianCalendar,它会将1-7的含义定义为周日至周六.

调用setFirstWeekday:2意味着你的周从星期一开始,用于计算这是否是这个月的第二周等等.这并不意味着你的星期一突然变成星期天.2012年6月1日仍然是星期五,而不是星期四,所以你得到6而不是5.

如果您想知道从一周开始的那几天,而不是工作日,这很容易:

(components.weekday - calendar.firstWeekday + 1) % 7
Run Code Online (Sandbox Code Playgroud)

  • 您工作日在哪里找到文档?我花了 30 分钟进行搜索,但找不到任何明确说明索引的参考资料。 (2认同)