Странное поведение при создании NSDate от 1 и 2 января - PullRequest
1 голос
/ 17 июня 2010

Я создаю дату наподобие этой:

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

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY"];
NSInteger year = [[dateFormatter stringFromDate:[NSDate date]] intValue];
NSLog(@"NSInteger YEAR : %d\n", year);

//minutes, hours, day and month are initialized elsewhere...

NSDateComponents *comps = [[NSDateComponents alloc] init];      
[comps setYear:year];
[comps setMonth:month];
[comps setDay:day];
[comps setHour:hours];
[comps setMinute:minutes];
NSDate *sampleDate = [gregorian dateFromComponents:comps];

NSLog(@"sampleDate YEAR : %d\n", [[dateFormatter stringFromDate:sampleDate] intValue]);

Моя проблема в том, что когда дата 1 января или 2 января, год неверен .. Здесь должен быть 2010 год (как явосстановить текущий год), но на самом деле это 2009 год ... я не понимаю, почему!И это происходит только в течение этих двух дней ...

У вас есть идеи, почему это так?Заранее спасибо.

1 Ответ

6 голосов
/ 17 июня 2010

См. стандарт Unicode . «yyyy» (нижний регистр) дает вам год, а «YYYY» (верхний регистр) дает год недели недели (то есть, если дата находится в пределах 52-й недели прошлого года, YYYY будет последним годом) ).

...