NSCalendar, why does setting the firstWeekday doesn't effect calculation outcome?

Peter Lapisu picture Peter Lapisu · Jun 1, 2013 · Viewed 7.4k times · Source

i need to calculate the weekday for a given date, however, depending on the calendar a week can star on Monday and somwhere on Sunday

so i wanted to set it, to start on Monday, using

[[NSCalendar currentCalendar] setFirstWeekday:2];

however, the calculation outcome is the same

{
    [[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);
}

returns same numbers, but why?

Answer

Sven picture Sven · Jun 1, 2013

The behavior you see is correct. The weekday component is not affected by the firstWeekday property. If you have a date representing a sunday it will always be a sunday wether you start your week on that sunday or on monday. What this should affect is the week number in the week property of your date components.