Проблема преобразования NSString в NSDate: всегда одна и та же дата! - PullRequest
2 голосов
/ 07 июля 2011

Вот мой метод класса для разбора NSString на NSDate объект. Вот код:

+ (NSDate *) stringToDate:(NSString *) string {
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.AAA Z"];

    NSDate *date = [dateFormatter dateFromString:string];
    NSLog(@"stringToDate(\"%@\") = '%@'", string, date);
    [dateFormatter release];
    return date;
}

и запустив его, я получаю следующий вывод:

stringToDate("2011-07-07 16:26:07.000 +0200") = '2011-07-06 22:00:00 +0000'
stringToDate("2011-07-07 16:26:17.000 +0200") = '2011-07-06 22:00:00 +0000'

... тот же вывод! Вы можете мне помочь?

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Если я вас правильно понял, ваша проблема в том, что эти две даты не совпадают.

Если это проблема, за нее отвечает строка

[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

.Он конвертирует данный объект времени в часовой пояс GMT + 00.

1 голос
/ 07 июля 2011

Вы должны написать:

NSLog(@"stringToDate(\"%@\") = '%@'", string, 
       [dateFormatter stringFromDate:date]);

В противном случае NSLog вызывает метод description вашего date объекта. Вот что говорится в документации об этом методе:

описание

Возвращает строковое представление получателя.

- (NSString *) описание

Возвращаемое значение

Строковое представление получателя в международном формате ГГГГ-ММ-ДД ЧЧ: ММ: СС ± ЧЧММ, где ± ЧЧММ представляет собой смещение часового пояса в часах и минутах от GMT (например, «2001-03-24» 10:45:32 +0600 ”).

Как видите, формат не совсем тот, который вы используете.

редактировать

Попробуйте изменить параметр dateFormat вашего dateFormatter на yyyy-MM-dd HH:mm:ss Z и используйте [dateFormatter stringFromDate:date] для отображения вашей даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...