Pour obtenir les jours de la semaine, j'utilise:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; NSArray *weekdays = [dateFormatter shortWeekdaySymbols];
5 Réponses :
Vous pouvez obtenir l'index basé sur 1 de la première semaine de la semaine de la locale actuelle à partir de la méthode -firstweekday code> d'un objet
nscalendar code> avec la locale actuelle. Ensuite, vous pouvez modifier votre tableau de noms de semaine en conséquence:
// 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);
a obtenu un résultat similaire à HASSEG à Swift en utilisant:
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 }
for i in 0...6 { let day = Calendar.current.weekdaySymbols[(i + Calendar.current.firstWeekday - 1) % 7] print(day) }
Comme la solution MyExec, mais plus générique et également concis
let numDays = Calendar.current.weekdaySymbols.count let first = Calendar.current.firstWeekday let end = first + numDays - 1 let days = (first...end).map {Calendar.current.weekdaySymbols[$0 % numDays]}
Est-il possible que vous signifiaisez laisse premier = calendar.current.firstweekday code> (sans diminution de 1)? Je pense autrement, vous seriez toujours des cordes à partir du dimanche, même pour un lundi-comme-jour locale.
Tu as raison. J'ai corrigé la réponse
Vous devez utiliser nscalender strong> pour changer le jour de début de votre semaine de votre semaine de manière programmatique. 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];