NSString to NSDate продолжает становиться нулевым - PullRequest
1 голос
/ 17 января 2012

Я знаю, что об этом спрашивали много раз, но я всегда получаю нулевое значение в моей NSDate. У меня есть строка типа «16 января 2012 г. 21:44:56». Я хочу преобразовать ее в «16 января 2012 г. 09:44:56 вечера». Я хочу добавить PM в преобразованную дату и преобразовать 24-часовой формат времени в 12-часовой формат времени. Вот мой код.

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMMM dd, YYYY HH:ii:ss a"];

    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];

Ответы [ 5 ]

2 голосов
/ 17 января 2012

Как правильно указал Ali3n, вы должны сначала установить формат dateString для форматера, чтобы получить действительный объект даты. Далее вы должны установить формат форматера на нужный и продолжить. Сделайте следующее:

NSString *dateString = @"January 16, 2012 21:44:56";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss"];

NSDate *dateFromString;
dateFromString = [dateFormatter dateFromString:dateString];

[dateFormatter setDateFormat:@"MMMM dd, YYYY HH:mm:ss a"];
NSString *stringFromDate  = [dateFormatter stringFromDate:dateFromString];
2 голосов
/ 17 января 2012

В вашей строке формата есть ошибка, и вам также нужно сообщить форматировщику локаль, в которой представлена ​​ваша строка даты.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss a"];

NSDate *dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release], dateFormatter = nil;

Настройка Local очень важна, так как у вас есть имя даты на вашем входе. Вам нужно будет указать NSDateFormatter, на каком языке это имя будет. В приведенном примере это на английском языке. Если вы запускаете код без установки локального на устройстве, где язык не установлен на английский, он не сможет проанализировать дату.

2 голосов
/ 17 января 2012

@"MMMM dd, YYYY HH:ii:ss a" этот формат должен совпадать с датой, которую ypu передает форматеру даты.

1 голос
/ 17 января 2012

Попробуйте экранировать литералы в строке формата.

[dateFormatter setDateFormat:@"MMMM dd',' YYYY HH:ii:ss a"];
0 голосов
/ 17 января 2012

Что касается ваших требований, вы должны изменить dateFormatter. Проверьте эту ссылку , чтобы узнать больше.

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, YYYY hh:mm:ss a"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
[dateFormatter release];
NSLog(@"%@",dateString);
...