NSDate получить конкретный день недели? - PullRequest
1 голос
/ 15 ноября 2010

Я надеюсь, что это всего лишь кривая обучения, которую я прохожу.

Я создаю произвольную дату.Я хочу найти субботу после третьей пятницы.

    NSLog(@"Date: %@", [date description]);
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"EST"];
    [calendar setTimeZone:zone];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
    [components setWeekday:6];        // 1 = Sunday ... 7 = Saturday
    [components setWeekdayOrdinal:3]; // 3rd Friday
    resultDate = [calendar dateFromComponents:components];
    NSLog(@"Date: %@", [resultDate description]);

И вывод:

Дата: 2010-11-01 05:00:00 GMT

Дата: 2010-11-01 05:00:00 GMT

Почему?Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 23 января 2013
// Sunday = 1, Saturday = 7

int weekday = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate: date] weekday];
2 голосов
/ 15 ноября 2010

Измените компоненты на:

(NSWeekdayCalendarUnit | NSYearCalendarUnit)

Это работает:

 NSDate *today = [[NSDate alloc] init];
 NSLog([today description]);

 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

 NSDateComponents *weekdayComponents = [gregorian components:(NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit) fromDate:today];

 NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];
 [componentsToSubtract setDay: 0 - ([weekdayComponents weekday])];
 [componentsToSubtract setWeekdayOrdinal:([weekdayComponents weekday] <= 6) ? 3 : 4];
 //[componentsToSubtract setWeekdayOrdinal:3]; //old way - not perfect

 NSDate *saturday = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0]; 
 NSDateComponents *components =
 [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
     fromDate: saturday];
 saturday = [gregorian dateFromComponents:components];

 NSLog([saturday description]);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...