在NSDateFormatter中更改一周的第一天

Erw*_*wan 8 iphone objective-c weekday

为了得到一周的日子,我使用:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSArray *weekdays = [dateFormatter shortWeekdaySymbols];
Run Code Online (Sandbox Code Playgroud)

平日给我一个包含日期名称的数组,但它从周日开始.出于某些原因,我希望此数组在周一或周日开始,具体取决于设备的本地化设置.

有办法吗?

has*_*seg 14

您可以从具有当前语言环境-firstWeekdayNSCalendar对象的方法获取当前语言环境的第一个工作日的从1开始的索引.然后,您可以相应地修改周名称数组:

// get week day names array
NSArray *weekdays = self.shortWeekdaySymbols;

// adjust array depending on which weekday should be first
NSUInteger firstWeekdayIndex = [NSCalendar currentCalendar].firstWeekday - 1;
if (firstWeekdayIndex) {

    NSRange firstRange = NSMakeRange(firstWeekdayIndex, weekdays.count - firstWeekdayIndex);
    NSRange lastRange = NSMakeRange(0, firstWeekdayIndex);

    NSArray *firstArray = [weekdays subarrayWithRange:firstRange];
    NSArray *lastArray  = [weekdays subarrayWithRange:lastRange];

    weekdays = [firstArray arrayByAddingObjectsFromArray:lastArray];
}

NSLog(@"%@", weekdays);
Run Code Online (Sandbox Code Playgroud)

我没有iPhone SDK,但是AFAIK这些API应该全部可用,并且行为与OS X上的行为相同.