Следующий код вычисляет номер предыдущей недели из данной недели при прохождении year
и week
.
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setWeek:NSWeekCalendarUnit];
[components setWeekOfYear:(week-1)]; //Get the previous week
[components setWeekday:2]; //Monday
[components setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [calendar dateFromComponents:components];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyww"];
NSString *newRevision = [formatter stringFromDate:date];
Я был удивлен, что это обрабатывало случаи как 201101 (который дает 201052), но это не правильно обрабатывает годы, где есть 53 недели. Например, для 201601 он возвращает 201552 вместо 201153. (По крайней мере, он должен вернуть 201153 в соответствии с http://en.wikipedia.org/wiki/ISO_week_date в любом случае.)
Я что-то не так делаю? Я проследил, чтобы убедиться, что данные введены правильно.