target-c - NSDateFormatter возвращает неправильную дату - PullRequest
0 голосов
/ 23 марта 2012

У меня есть этот кусок кода:

 // Convert string to date object
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"MMMM d, YYYY"];
        NSDate *formatDate = [dateFormat dateFromString:self.date];
        NSLog(@"1-%@", self.date);
        NSLog(@"2-%@", formatDate);
        NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:formatDate];
        NSString *dateCal = [NSString stringWithFormat:@"%d/%d/%d", [components day], [components month], [components year]];
        NSLog(@"3-%@", dateCal);
        milage.date = dateCal;

Первый NSLog возвращает:

1 марта 23, 2012

Второй:

2-2011-12-25 00:00:00 + 0000

Третий:

3-25 / 12/2011

Почему дата изменяется при получении даты из строки и ее форматировании? Я ожидаю, что третий NSLog (или dateCal) будет равен 23/3/2012. Я живу в Великобритании, так что это не связано с часовым поясом ..

Спасибо

Jack

Ответы [ 3 ]

3 голосов
/ 16 апреля 2012

Необходимо использовать строчные буквы 'y' в строке:

[dateFormat setDateFormat:@"MMMM d, YYYY"];
2 голосов
/ 23 марта 2012

Использовали ли вы метод setLocale?

Также из технических вопросов и ответов:

Если вы работаете с видимыми пользователем датами, вам следует избегать установки строки формата даты, поскольку очень сложно предсказать, как ваша строка формата будет выражаться во всех возможных пользовательских конфигурациях. Скорее, вы должны попытаться ограничить себя настройкой даты и времени (через - [NSDateFormatter setDateStyle:] и - [NSDateFormatter setTimeStyle:]).

0 голосов
/ 23 марта 2012

Используйте [dateFormat setDateStyle:NSDateFormatterLongStyle];
Вместо [dateFormat setDateFormat:@"MMMM d, YYYY"];
Даст вам причину, как только я ее найду.

...