Часовой пояс добавлен к часу после использования nsdateformatter - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь преобразовать строковую дату (2011-06-08T08: 05: 00.000-08: 00) в NSDate, используя следующий код:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
//Translate 2011-06-08T08:05:00.000-08:00 into 2011-06-08T08:05:00.000-0800
stringDate = [stringDate stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([aDate length] - 5, 5)];
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSSZZZ"];  
NSDate *dateFromString = [dateFormatter dateFromString:stringDate];

На этом этапе dateFromString2011-06-08 16:05:00 +0000.На самом деле я хотел, чтобы dateFromString был 2011-06-08 08:05:00 -0800.Что я делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 09 июня 2011

Так что это не будет иметь прямой ответ и будет предполагать, что ваш формат строки будет таким же.То, что мы собираемся извлечь часть часового пояса (последние 5 символов), а затем рассчитать, сколько секунд мы отключены от GMT.NSTimeZone имеет удобный метод timeZoneForSecondsFromGMT:, который поможет нам получить то, что нам нужно.Это то, что вам нужно добавить к коду в вопросе.

NSString * zoneString = [stringDate substringFromIndex:([stringDate length] - 5)];
NSTimeInterval timeInterval = [[zoneString substringToIndex:3] intValue] * 3600;
timeInterval += [[zoneString substringFromIndex:3] intValue] * 60;

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeInterval]];
[formatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss ZZZ"];
NSLog(@"%@", [formatter stringFromDate:dateFromString]);

Надеюсь, это поможет вам.Если вы уже нашли лучший ответ, сообщите нам.

Оригинальный ответ
Одна вещь о NSDate заключается в том, что возвращаемое время всегда в GMT.Вы не можете это изменить.Вам придется использовать NSDateFormatter, чтобы напечатать его правильноПримерно так:

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PST"]];
[formatter setTimeStyle:NSDateFormatterFullStyle];
[formatter setDateStyle:NSDateFormatterFullStyle];
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]);

Так что установка часового пояса для форматера, который делает dateForString:, не поможет.Вам нужно будет создать новый, если вы хотите использовать их с другим часовым поясом.

...