Преобразование форматера NSDate не дает правильную дату - PullRequest
0 голосов
/ 28 января 2012

У меня проблема с правильным поиском даты с использованием форматера даты. Я сохранил дату в следующем формате:

[dateFormat setDateFormat: @ "ГГГГ-ММ-дд ЧЧ: мм: сс"];

Теперь мне нужно отобразить сохраненную дату в контроллере представления. Для удобства читабельности и простоты я извлек сохраненную дату из базы данных и изменил ее на короткий формат, например, 17 января, 18 февраля и т. Д.это код реализации для этого:

remind.Date = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 3)];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:remind.Date];
[dateFormat setDateFormat:@"MMMM dd"];
NSString *dateVal = [dateFormat stringFromDate:date];
remind.Date = dateVal;

Теперь значение даты будет видно, как показано на следующем снимке:

enter image description here

Все эти датысохраненный в массив с именем grpArray

Теперь я хочу получить полную дату отформатированной даты, когда я выбираю строку и перехожу к контроллеру, где эта дата сохраняется, для того, чтобы он выбрал строку в пути индекса Iреализовал следующий код:

-(void)tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        ReminderClass *rem = [self.grpArray objectAtIndex:indexPath.section];

        // Instantiate your detail/editor view controller,
        // and pass in the ReminderClass object to be edited.
        ERAddReminderViewController *rdvc = [[[ERAddReminderViewController alloc]initWithReminder:rem]autorelease];

        NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
        [dateFormat setDateFormat:@"MMMM dd"];
        [dateFormat setLenient:YES];
        NSDate *date = [dateFormat dateFromString:rem.Date];
        [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString *dateVal = [dateFormat stringFromDate:date];
        rem.Date = dateVal;

        [self.navigationController pushViewController:rdvc animated:YES];
        rdvc.navigationItem.rightBarButtonItem.title = @"Edit";
}

Теперь в соответствии с логикой я должен получить полную дату, т.е. указанный формат. Работает нормально, но возникла проблема с правильным годом aи время, которое было первоначально сохранено. Пожалуйста, см. следующий снимок для пояснения:

enter image description here

Теперь, как мы видим, дата 1970-01-17 00: 00: 00

Но фактическая дата, которую я сохранил, была 2012-01-17 19: 40: 40

Что пошло не так с реализацией

Может кто-нибудь, пожалуйста, направьте меня правильно

Спасибо всем заранее:)

1 Ответ

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

Я вижу, что вы пытаетесь преобразовать дату MMMM dd в yyyy-MM-dd HH:mm:ss.Какой из курсов не возможен, поскольку дата в первом формате не знает года и времени.
Вот почему он показывает 1970 00:00:00, 01-17 верны (конечно)* Вы всегда должны «сохранять» исходную дату yyyy-MM-dd HH:mm:ss и работать с ней вместо отформатированной.

...