Обычно, когда вы получаете дату строки, как это, вы знаете, что локаль они приходят, и вы бы взять NSDateFormatter, установите его с помощью языкового стандарта setLocale:
, установите дату и время форматирования с использованием setDateStyle:
и setTimeStyle:
, а затем используйте dateFromString:
. Если вы не можете сделать это, потому что вы не знаете, локаль, то вы можете use the UNIX functions:
struct tm sometime;
const char *formatString = "%a, %d %b %Y %T %z";
strptime_l("Fri, 25 Mar 2011 10:16:00 -0700", formatString, &sometime, NULL);
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970: mktime(&sometime)];
Далее, вы хотите, чтобы «преобразовать» newDate Восточное время. Я говорю «конвертировать», потому что NSDates не содержат никакой информации о часовых поясах - они представлены всего несколько секунд с 1 января 2001 года, поэтому идея преобразования не имеет смысла. Когда вы печатаете NSDate, вы получаете его в формате UTC (+0000), но NSDate больше не связан с этим часовым поясом, чем с любым другим.
То, что вы хотите сделать вместо этого создать dateFormatter с правым часовым поясом и использовать его для вывода даты:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"]];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSLog(@"%@",[dateFormatter stringFromDate:newDate]);
// Outputs 25 Mar 2011 13:16