NSDateFormatter возвращает неверную дату из строки - PullRequest
6 голосов
/ 09 января 2012

У меня есть метод,

+ (NSDate *) convertToDateFrom:(NSString *) dateString
{
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"];

    NSDate *date = [df dateFromString:dateString];

    return date;
}

Когда я прохожу,

@"Monday, 21 November 2011 17:01" //Passed string

Возвращает неправильную дату,

2011-11-21 23:14:00 +0000 // Output
<ч />

Я не уверен, правильно ли я использую эти флаги или NSDateFormatter неправильно конвертирует мою строку в дату.

Я что-то не так делаю?

Спасибо

Ответы [ 3 ]

12 голосов
/ 09 января 2012

+0000 в конце даты указывает на GMT. Все даты хранятся относительно GMT; когда вы конвертируете дату в строку или наоборот с использованием средства форматирования даты, смещение вашего часового пояса включается. Вы можете использовать метод NSDateFormatter -setTimeZone:, чтобы установить используемый часовой пояс.

Короче говоря, вы не делаете ничего плохого в своем коде. Используйте [df stringFromDate:date];, чтобы увидеть, что дата верна. (Вы также можете использовать NSDate's -descriptionWithCalendarFormat:timeZone:locale:.)

0 голосов
/ 26 июня 2013

попробуйте использовать

df stringFromDate:date

После сработал на моем,

NSLog(@"Date for locale %@: %@",
      [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]);

дал мне вывод как:

Date for locale en_US: Wednesday, 26 June 2013 15:50
0 голосов
/ 09 января 2012

Попробуйте установить часовой пояс и локаль.

[df setLocale:[NSLocale currentLocale]];
[df setTimeZone:[NSTimeZone systemTimeZone]];
...