Преобразование даты NSString с 1 часовым поясом в объект NSDate с другим часовым поясом - PullRequest
0 голосов
/ 01 мая 2011

Привет всем, Мне нужно преобразовать следующий формат в новый формат, используя NSDateFormatter. Я довольно приправлен этим, но по какой-то причине я не могу вспомнить правильную информацию о форматировании для этого поля:

'Пт, 25 марта 2011 10:16:00 -0700'.

Я пытался использовать этот формат: «ааа, дд ббб ГГГГ ЧЧ: ММ: СС ЧЧЧММ», но он не работает, дает мне дату в прошлом.

Мне также нужно преобразовать его в восточный часовой пояс при создании новой даты. Там написано «+0000», но к чему это нормализовано?

Любая помощь приветствуется, Спасибо, ~ Arash

1 Ответ

1 голос
/ 31 октября 2011

Обычно, когда вы получаете такие строки даты, вы знаете, из какой они локали, и вы берете 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
...