Как получить номер текущей недели в target-c? - PullRequest
2 голосов
/ 25 октября 2011

Я разрабатываю приложение, которое нужно получить на текущей неделе. Я попробовал это:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *dateString = @"1-1-2011";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comp = [gregorian components:NSWeekCalendarUnit fromDate:dateFromString];
    NSLog(@"%d", comp.week);

    [dateFormatter release];
}

но это показывает мне 52. Что на самом деле неверный результат. Пожалуйста, предложите мне любые идеи. Заранее спасибо.

1 Ответ

5 голосов
/ 25 октября 2011

Дата недели зависит от того, какой стандарт нумерации используется.Например, стандарт ISO-8601 определяет неделю 1 года как "неделю с первым четвергом года".

Первое января 2011 года было субботой, что означаетследующая неделя была 1-й неделей 2011 года, то есть неделей 27.12.2010–2.1.2011 52-й недели 2010 года.

Кроме того, существует несколько несовместимых стандартов в отношении того, когда недели начинаются или заканчиваются, и как нумеруются недели в году.,Это делает недельные номера запутанным способом указания диапазона дат и наилучшим решением, чтобы избежать их использования.

Из документации к NSCalendar, кажется, вы также можете использовать setMinimumDaysInFirstWeek: для настройкикак он насчитывает недели.

...