Не удалось преобразовать дату из строки - PullRequest
1 голос
/ 13 января 2012

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

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

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

Для этого, когда я назначаю то же самое переменной

NSString * today = presentDateTime;

когда я NSLog Datestring получаю результат 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;

Ответы [ 4 ]

3 голосов
/ 13 января 2012

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

Редактировать: После игры с кодом оказывается, что 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);
1 голос
/ 13 января 2012

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

[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss.SSSZZZ"]
0 голосов
/ 13 января 2012

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

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 голосов
/ 13 января 2012

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

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

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

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