Преобразование строки даты путем замены текущего года дает неверный результат

У меня есть NSString со значением "29/01/2010", которое я хочу преобразовать в NSDate, заменив значение года текущим годом.

Для этого я пробовал с

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setYear:2013];
    [components setMonth:01];
    [components setDay:29];
    NSLog(@"%@",[calendar dateFromComponents:components]);

Результат, который он дает, 2013-01-28 18:30:00 +0000

Другой способ, который пробовали, это

     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy"];
    NSString *yearString = [formatter stringFromDate:[NSDate date]];

    NSArray *dateComponents = [aStrBirthDate componentsSeparatedByString:@"/"];
    aStrBirthDate = [aStrBirthDate stringByReplacingOccurrencesOfString:[dateComponents lastObject] withString:yearString];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/MM/yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:aStrBirthDate];

Это также дает тот же результат 2013-01-28 18:30:00 +0000


person Heena    schedule 04.07.2013    source источник
comment
Линия не нужна и течет если не в АРК: NSDate *dateFromString = [[NSDate alloc] init]; просто делай NSDate *dateFromString = [dateFormatter dateFromString:aStrBirthDate];   -  person rckoenes    schedule 04.07.2013
comment
@rckoenes, я использую ARC. Так что это заявление не просочится   -  person Heena    schedule 04.07.2013
comment
@Abizern, я попытался ответить на предложенный вопрос `[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@GMT]];`, но он все равно не работает. Он дает странную и неправильную дату как 1726785-05-06 00:00:00 +0000   -  person Heena    schedule 04.07.2013
comment
@Roshni: NSLogging NSDate всегда печатает дату по Гринвичу. Должно быть много ответов, содержащих эту информацию. См., например, stackoverflow.com/a/6229695/1187415 или stackoverflow.com/a/4547607/1187415.   -  person Martin R    schedule 04.07.2013
comment
@Roshni все же это неправильно, вы создаете экземпляр объекта, чтобы заменить его другим в следующей строке. Это просто плохое кодирование.   -  person rckoenes    schedule 04.07.2013