NSDate格式化程序转换不会产生正确的日期

时间:2012-01-28 12:05:55

标签: iphone nsdate nsdateformatter

我正面临使用日期格式化程序进行正确日期检索的问题。我已按以下格式保存日期:

[dateFormat setDateFormat:@“YYYY-MM-dd HH:mm:ss”];

现在我需要在视图控制器中显示保存的日期。为了方便阅读和简单,我从数据库中检索了保存的日期并更改为简短格式,如1月17日,2月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

的数组中

现在我想检索格式化日期的完整日期,当我选择行并导航到保存该日期的控制器时,为了在索引路径中选择行,我实现了以下代码:

-(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";
}

现在根据逻辑,我应该得到完整的日期,即指定的格式。它工作正常,但是最初保存的正确年份和时间出现了问题。请参阅以下快照以获得澄清:

enter image description here

现在我们可以看到的日期是1970-01-17 00:00:00

但我保存的实际日期是2012-01-17 19:40:40

实施出了什么问题

任何人都可以指导我吗

提前感谢所有人:)

1 个答案:

答案 0 :(得分:1)

我看到的是您要将日期MMMM dd转换为yyyy-MM-dd HH:mm:ss。 由于第一种格式的日期不知道年份和时间,因此哪种方法是不可能的 这就是为什么它显示1970 00:00:00,01-17是正确的(当然)为什么你总是要“存储”原始日期yyyy-MM-dd HH:mm:ss并使用它而不是格式化的。