2011-01-02 4 views

Antwort

4

[NSDate dateWithNaturalLanguageString: @"next Saturday"]


Edit: Ab OS X 10.9 und iOS 8, können Sie dies tun:

NSCalendar *calendar = [NSCalendar currentCalendar]; 

NSDate *now = [NSDate date]; 
NSDateComponents *saturday = [[NSDateComponents alloc] init]; 
saturday.weekday = 7 /* Saturday */; 

NSDate *nextSaturday = [calendar nextDateAfterDate:now matchingComponents:saturday options:0]; 
+3

Aus der offiziellen Dokumentation: Diese Methode (dateWithNaturalLanguageString :) unterstützt nur eine begrenzte Menge von umgangssprachlichen Phrasen, hauptsächlich in Englisch. Es kann zu unerwarteten Ergebnissen führen, und es wird dringend davon abgeraten. –

+0

@Bavarious - das habe ich gesehen. Es ist viel einfacher als das, was ich tun würde, und es funktioniert in meinem Fall. – Moshe

+0

Auch wenn es nur eine begrenzte Menge von umgangssprachlichen Redewendungen in Englisch unterstützt, wird "nächster Samstag" in jeder Anwendung funktionieren. –

10
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [NSDate date]; 
NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:date]; 
NSInteger todayWeekday = [weekdayComponents weekday]; 

enum Weeks { 
    SUNDAY = 1, 
    MONDAY, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY, 
    SATURDAY 
}; 

NSInteger moveDays=SATURDAY-todayWeekday; 
if (moveDays<=0) { 
    moveDays+=7; 
} 

NSDateComponents *components = [NSDateComponents new]; 
components.day=moveDays; 

NSCalendar *calendar=[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
NSDate* newDate = [calendar dateByAddingComponents:components toDate:date options:0]; 

NSLog(@"%@",newDate); 
+0

Dies sollte als die richtige Antwort markiert werden. – BFar