Ve výchozím nastavení je NSDateFormatter nastaven na localTimeZone. Protože váš dateString neměl informace o časovém pásmu, vypočítal čas podle localTimeZone. Pokud víte, že časové pásmo vašeho dateString je UTC, musíte jej nastavit na dateFormatter.
NSDate představuje absolutní čas, zobrazení se může lišit od časových pásem, ale jedná se o jedinečnou hodnotu a nebude ovlivněna letním časem.
-(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;
}