NSDateFormatter zgłasza 2 czerwca 2013 r. Jako zero w tygodniu

ja używamNSDateFormatter aby przekonwertować serię dat na numer tygodnia w ciągu miesiąca.

Kod formatowania daty, którego używam, jestyyyyMMW a wszystko, co przeczytałem, mówi mi, że W będzie między 1-5.

Jednak 2 czerwca 2013 r. Przypadł na niedzielę (domyślny dzień rozpoczęcia tygodnia w kalendarzu gregoriańskim), a jego numer tygodnia jest zgłaszany jako 0, mimo że data rozpoczęcia tygodnia jest obliczana poprawnie:

2013-06-03 14:15:45.611 date=20130531, week=2013055, start of week=20130526
2013-06-03 14:15:45.612 date=20130602, week=2013060, start of week=20130602
2013-06-03 14:15:45.612 date=20130603, week=2013061, start of week=20130602

Jakiś szybki i brudny kod testowy do odtworzenia dziennika pokazanego powyżej:

    NSDateFormatter *dateFormatDaily = [[NSDateFormatter alloc] init];
[dateFormatDaily setDateFormat:@"yyyyMMdd"];
NSDateFormatter *dateFormatterWeekly = [[NSDateFormatter alloc] init];
[dateFormatterWeekly setDateFormat:@"yyyyMMW"];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setFirstWeekday:1]; // default but set here for clarity

NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setMonth:5];
[dateComponents setDay:31];
[dateComponents setYear:2013];
NSDate *date_1 = [calendar dateFromComponents:dateComponents];
[dateComponents setMonth:6];
[dateComponents setDay:2];
NSDate *date_2 = [calendar dateFromComponents:dateComponents];
[dateComponents setDay:3];
NSDate *date_3 = [calendar dateFromComponents:dateComponents];
NSArray *datesToTest = @[date_1, date_2, date_3];

for (NSDate *date in datesToTest) {
    NSString *weekNo = [dateFormatterWeekly stringFromDate:date];
    NSDate *beginningOfWeek = nil;
    BOOL rc = [calendar rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:NULL forDate:date];
    if (rc) {
        NSLog(@"date=%@, week=%@, start of week=%@", [dateFormatDaily stringFromDate:date], weekNo, [dateFormatDaily stringFromDate:beginningOfWeek]);
    } else {
        NSLog(@"Could not calculate beginning of week");
    }
}

Jakieś pomysły? Numer tygodnia 0 w żadnych okolicznościachwydaje się źle dla mnie.

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion