2012-01-13 9 views
1

Я делаю приложение, где я использую следующую ссылку http://iosdevelopertips.com/cocoa/date-formatters-examples-take-3.html, чтобы преобразовать дату из строки.Не удалось преобразовать дату из строки

Я использую приведенный ниже код к тому же, следуя приведенной выше ссылке руководства. когда я NSlogPresentDateTime он дает 20120111 13: 03: 49.263 + 05: 30.

поэтому я беру этот формат и хочу преобразовать его в формат «EEEE MMMM d, YYYY h:mm a, zzz».

Чтобы сделать это, когда я задаю тот же переменной

NSString * сегодня = presentDateTime;

когда я NSLogDatestring Я получаю результат NULL я могу знать, где я неправильно? Пожалуйста, помогите мне решить эту проблему, предложив, какие изменения нужно сделать

// Код

-(NSString *)DateFormat:(NSString *) presentDateTime 

{ 


presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@"T" withString:@" "]; 
presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@" +" withString:@"+"]; 
presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
NSLog(@"Present date::::%@",presentDateTime); 

    NSString *today = presentDateTime; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss:SSSZZZ"]; 
NSDate *date = [dateFormat dateFromString:today]; 

[dateFormat setDateFormat:@"EEEE MMMM d, YYYY h:mm a, zzz"]; 
NSString *dateString = [dateFormat stringFromDate:date]; 
[dateFormat release]; 
NSLog(@"dateString:::Date>>>>:%@::::\n%@",dateString, presentDateTime); 
return dateString; 
+2

Ваш синтаксический анализ даты ('yyyyMMdd') является неполным, является ли это намерением? Когда вы печатаете 'date' с' NSLog', вы получаете разумную дату или это нуль? – DarkDust

+0

@ crazy2431 Вам не нужно принимать во внимание время из-за часового пояса, иначе вы можете получить неправильную дату в зависимости от часового пояса. –

+0

@DarkDust извините, что это было не по намерению, я думаю, что я ddint добавил правильный формат ... wat format i shd add? Я не получаю разумную дату, когда я nslog для datestring..its давая нуль – crazy2431

ответ

3

Вашей дату шаблона формата для разбора даты является неправильным/неполным. Для строки 20120111 13:03:49.263+05:30 формат будет YYYYMMdd HH:mm:ss.SSSZZZ. См. this table для шаблонов строк формата.

Edit: После игры с этим кодом, то получается, что NSDateParser дроссели на часовом поясе +05:30. Он ожидает +0530, без двоеточия. Вот как удалить его:

NSString *today = @"20120111 13:03:49.263+05:30"; 
    NSRange colon = [today rangeOfString:@":" options:NSBackwardsSearch]; 
    if (colon.location != NSNotFound) { 
     today = [today stringByReplacingCharactersInRange:colon withString:@""]; 
    } 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"YYYYMMdd HH:mm:ss.SSSZZZ"]; 
    NSDate *date = [dateFormat dateFromString:today]; 
    NSLog(@"%@", date); 
+0

Формат шаблона правильный и не является неправильным.В указанной таблице и в любом другом стандарте никогда не говорится использовать полный формат даты для преобразования строки <->. – Nekto

+0

@DarkDust Я изменил формат, как у, упомянутый в моем вышеприведенном коде .. Когда я nslog для Datestring, я все равно null – crazy2431

+0

@Nekto: попробуйте это для себя: если формат даты неполный, тогда 'dateFromString:' терпит неудачу. – DarkDust

1

Когда вы разбираете исходную строку даты необходимо указать весь формат, например:

[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss.SSSZZZ"] 
+0

i hv отредактировал мой код как и упомянул все еще я получаю нуль – crazy2431

-2

Ваш date переменная всегда NIL, потому что ваш формат даты (yyyyMMdd) является неполным, так как ваша строка ввода today содержит дополнительную информацию (20120111 13:03:49.263+05:30). Таким образом, вы можете просто обрезать ненужные символы:

if ([presentDateTime count] < 8) return nil; 
NSString *today = [presentDateTime substringToIndex:8]; 

Или вы должны указать полный формат даты, как указано на @jonkroll

+0

i hv отредактировал мой код как и упомянул все еще я получаю null – crazy2431

+0

Показать обновленный код – Nekto

+0

Это очень плохая идея: вы отрубаете важную информацию вместо правильно разобрав его! – DarkDust

-1

Сравните свой код следующим

NSString *dateString = @"6:30 18 Oct"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"hh:mm dd/MMM"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
dateFromString = [dateFormatter dateFromString:dateString]; 
[dateFormatter release]; 

Его просто образец для подражания. и выясните, что происходит, напечатав его в nslog.

+0

Вы используете совершенно другой формат даты чем плакат, как это ему поможет? – DarkDust

+0

Ya, это не тот же формат, но он может ссылаться на него и попробовать изменить формат и увидеть результаты в nslog, вот почему я уже сказал, что это просто образец. – Minakshi

Смежные вопросы