Par défaut, NSDateFormatter est défini sur localTimeZone. Étant donné que votre dateString n'avait pas d'informations sur le fuseau horaire, il a calculé l'heure par rapport à localTimeZone. Si vous savez que le fuseau horaire de votre dateString est UTC, vous devez le définir sur dateFormatter.
NSDate représente l'heure absolue, la représentation peut varier selon les fuseaux horaires, mais c'est une valeur unique et elle ne sera pas affectée par l'heure d'été.
-(NSDate *)formatDateWithString:(NSString *)dateString{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [dateFormatter dateFromString:dateString];
NSLog(@"Formatted Timestamp: %@ - Original Timestamp: %@", date,dateString);
return date;
}