9

私が使用する曜日を取得するために:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSArray *weekdays = [dateFormatter shortWeekdaySymbols];

平日は曜日名の配列を提供しますが、日曜日から始まります。何らかの理由で、デバイスのローカリゼーション設定に応じて、この配列を月曜日または日曜日までに開始したいと考えています。

それを行う方法はありますか?

4

5 に答える 5

15

現在のロケールを持つオブジェクトの-firstWeekdayメソッドから、現在のロケールの最初の曜日の 1 から始まるインデックスを取得できます。NSCalendar次に、それに応じて週名配列を変更できます。

// 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);

私は iPhone SDK を持っていませんが、これらの API はすべてそこにあり、OS X と同じように動作するはずです。

于 2010-09-02T13:33:50.073 に答える
1

以下を使用して、Swift の hasseg と同様の結果を達成しました。

    var symbols = dateFormatter.shortWeekdaySymbols as! [String]
    let firstDayIndex = calendar.firstWeekday - 1

    if firstDayIndex > 0 {
        var sub = symbols[0..<firstDayIndex]
        symbols.removeRange(Range<Int>(start:0, end:firstDayIndex))
        symbols += sub
    }
于 2015-03-13T13:05:33.623 に答える