2010-09-02 15 views
8

में सप्ताह के पहले दिन बदलने के क्रम सप्ताह मैं उपयोग के दिनों प्राप्त करने के लिए:NSDateFormatter

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

सप्ताह के दिन मुझे दिन नाम के साथ एक सरणी देता है, लेकिन वह रविवार से शुरू होता है। कुछ कारणों से मैं डिवाइस की स्थानीयकरण सेटिंग्स के आधार पर सोमवार या रविवार तक यह सरणी शुरू करना चाहता हूं।

क्या ऐसा करने का कोई तरीका है?

उत्तर

13

वर्तमान लोकेल के साथ NSCalendar ऑब्जेक्ट की -firstWeekday विधि से वर्तमान लोकेल के पहले सप्ताह के 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); 

मैं iPhone SDK की जरूरत नहीं है लेकिन AFAIK इन API सभी उपलब्ध होना चाहिए और

1

एक हासिल ओएस एक्स पर के रूप में ही तरह से व्यवहार समान परिणाम का उपयोग कर स्विफ्ट में 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 
    } 
0
for i in 0...6 { 
    let day = Calendar.current.weekdaySymbols[(i + Calendar.current.firstWeekday - 1) % 7] 
    print(day) 
} 
1
myexec समाधान की तरह

लेकिन अधिक सामान्य और समान रूप से संक्षिप्त

+०१२३५१६४१०६१
let numDays = Calendar.current.weekdaySymbols.count 
let first = Calendar.current.firstWeekday - 1 
let end = first + numDays - 1 

let days = (first...end).map {Calendar.current.weekdaySymbols[$0 % numDays]} 
1

आपको अपने सप्ताह के शुरुआती दिन को प्रोग्रामेटिक रूप से बदलने के लिए एनएससीलेंडर का उपयोग करने की आवश्यकता है।

NSCalendar *_calendar; 
_calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
_calendar.timeZone = [NSTimeZone localTimeZone]; 
[_calendar setFirstWeekday:2];// Sunday == 1, Saturday == 7 
_calendar.locale = [NSLocale currentLocale]; 

    NSDateComponents *dateComponent = [_calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]]; 
    NSDate *now = [NSDate date]; 
    NSDateComponents *comp = [_calendar components:NSCalendarUnitYear fromDate:now]; 
    [comp setWeekOfMonth:dateComponent.weekOfYear]; //Week number. 
    [comp setWeekday:2]; 

    NSDate * weekstartPrev = [_calendar dateFromComponents:comp];