2011-05-01 3 views
0

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

'Fri, 25 Mar 2011 10:16:00 -0700'.

Я пробовал использовать этот формат: 'aaa, dd bbb YYYY HH: MM: SS ZHHMM', но он не работает, дает мне дату в прошлом.

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

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

ответ

1

Обычно, когда вы получаете дату строки, как это, вы знаете, что локаль они приходят, и вы бы взять 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 
Смежные вопросы