Zacznij od wybieraka NSDate
i dodaj do niego 24 * 60 * 60 sekund do poniedziałku. Dodaj wynikową datę do wyniku. Kontynuuj dodawanie 7 * 24 * 60 * 60 sekund do ostatniej dodanej daty i pchanie wyniku na listę zwrotną, aż uzyskasz wszystkie 64 poniedziałki. Oto w jaki sposób stwierdzić, czy NSDate
przypada na poniedziałek:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =[gregorian components:NSWeekdayCalendarUnit fromDate:dateOfInterest];
NSInteger weekday = [weekdayComponents weekday];
if (weekday == 2) ... // 2 represents Monday
EDIT: DaveDeLong wskazał niedobór powyższego algorytmu: będzie przesunąć po raz dwa razy w dniach zmiana na czas letni. Zamiast zliczania sekund ręcznego, ten kod dodać dzień NSDate
:
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1]; // Add 1 when searching for the next Monday; add 7 when iterating 63 times
NSDate *date = [gregorian dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];
Dla przypomnienia, nie zgadzam się z bliskich głosów. –
tak ... to przyzwoite wyzwanie; Ayaz, kiedy mówisz, że chcesz "przynieść" następne 64 poniedziałki, w jakiej formie chcesz to zrobić? NSDates lub EKEvents lub? –
Chcę NSDates ... –