Дата меняется при конвертации в NSDate из NSString - PullRequest
2 голосов
/ 28 сентября 2010

Я конвертирую NSString в NSDate с помощью NSDateFormatter. Теперь код отлично работает здесь во всех ОС с устройством и симулятором, но он создает разные выходные данные в Великобритании, США. Вот код, который я использую.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

Фактическая дата: 2010-09-05 04: 00: 00

Выход в США: 2010-09-04 21:00:00 -0700

Кажется, проблема в TimeZone / Locale где-то, но не знаю решения. Я также попробовал:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

но не смог выйти из вопроса.

Есть ли какой-нибудь простой способ получить NSDate из NSString, поскольку строка фактически представляет без влияния TimeZone. Я просто хочу получить NSDate, как он появляется в NSString без изменения даты и времени. Там в любом случае? Заранее спасибо.

1 Ответ

2 голосов
/ 25 июля 2011

Это зависит от того, как вы снова выводите дату.Если вы используете NSDateFormatter, вы получите тот же результат.Если вы просто выводите дату, вызывая [date description], вывод будет отличаться, поскольку информация о местном часовом поясе включена.

Правильное использование будет:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

NSString* finalDateString =  [dateFormatter stringFromDate:dateObj];
[dateFormatter release];

Вывод:

2010-09-05 04:00:00

Я тестировал этот код в нескольких часовых поясах.

...