Domyślnie NSDateFormatter jest ustawiony na localTimeZone. Ponieważ dataString nie zawierała informacji o strefie czasowej, obliczył czas w stosunku do localTimeZone. Jeśli wiesz, że strefa czasowa twojego dateString to UTC, musisz ustawić ją na dateFormatter.
NSDate reprezentuje czas bezwzględny, reprezentacja może się różnić w stosunku do stref czasowych, ale jest to unikalna wartość i nie ma na nią wpływu zmiana czasu.
-(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;
}