Obtendo a data de em algumas horas

estou usando

NSDate *date = [NSDate date]; 

para obter a data, mas a data que eu tenho é de 2 horas.

   

Objetos NSDate não têm fusos horários. Eles representam um momento absoluto no tempo. No entanto, quando você pede uma para sua description (imprimindo com NSLog() , por exemplo), ele precisa escolher um fuso horário. A opção “padrão” mais razoável é a GMT. Se você não estiver no GMT, a data parecerá incorreta, pelo valor do seu próprio deslocamento.

Você deve sempre usar um NSDateFormatter para criar uma string para exibição. O fuso horário do formatador deve ser definido para o seu, que é o padrão.

Você pode obter sua data corrigida assim:

 NSDate * dateGMT = [NSDate date]; NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT]; NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT]; 
 -(NSDate *)getDateInCurrentSystemTimeZone { NSDate* sourceDate = [NSDate date]; NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate]; return destinationDate; }