Это связано с разницей часового пояса между UTC (GMT) и вашим часовым поясом (вы, вероятно, в GMT + 2). NSDate находится в UTC по умолчанию. Вот почему [дата NSDate] может отличаться от местного времени.
Следующий код должен вывести 1 января 2012 года:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy zzz"];
NSLog(@"**> %@",[dateFormatter dateFromString:@"2012 GMT"]);
[dateFormatter release];
или
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy"];
NSLog(@"NSDate : %@",[dateFormatter dateFromString:@"2012"]);
[dateFormatter release];