Обычно, когда вы получаете такие строки даты, вы знаете, из какой они локали, и вы берете NSDateFormatter, устанавливаете его локаль с помощью setLocale:
, устанавливаете формат даты и времени с помощью setDateStyle:
иsetTimeStyle:
и затем используйте dateFromString:
.Если вы не можете сделать это, потому что вы не знаете локаль, тогда вы можете использовать функции UNIX :
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 в EasternВремя.Я говорю «конвертировать», потому что 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