无法使用CoreData保存正确的日期

时间:2010-03-04 13:35:49

标签: iphone cocoa-touch core-data

我使用Cocoa Touch Template创建了一个CoreData应用程序。我修改了包含的.xcdatamodel文件,使其具有一个名为'Date'的属性,数据类型为'Date'和其他字符串属性。

我使用以下代码保存“日期”字段的数据:

NSDateFormatter *dateFormatter=[[[NSDateFormatter alloc] init] autorelease] ;
[dateFormatter setDateFormat:@"YYYY-MM-DD"];
NSDate *date= [[[NSDate alloc] init] autorelease];
date=[dateFormatter dateFromString:@"2010-03-01"];

[newManagedObject setValue:date forKey:@"Date"];

 NSError *error;
    if (![context save:&error]) {
        // Handle the error...
    }

要在TableView中显示数据,我在cellForRowAtIndexPath中编写以下代码:方法:

// Configure the cell.

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];

//Formatting Date Portion of Name
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]  autorelease];
[dateFormatter setDateFormat:@"DD MMM YYYY"]; 

NSString *fName= [NSString stringWithFormat: @"%@: %@", [dateFormatter stringFromDate:[managedObject valueForKey:@"Date"]],[[managedObject valueForKey:@"Name"] description]];

我很惊讶TableView中的单元显示 - 1970年1月1日:测试

我还尝试使用NSDateComponents而不是NSDateFormatter,因此我更改了保存日期的代码:

    NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1];
[comps setMonth:3];
[comps setYear:2010];
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release]; 

这一次令人惊讶的是细胞展示 - 2010年3月60日。

所以我得到了2个不同但错误的值,但我无法显示应该是的正确值 - 2010年3月1日。我真的失去了对这里可能出错的想法。

有人可以建议我在哪里可以开始寻找吗?我的代码有什么问题吗?使用CoreData保存日期是否存在一些公认的问题?

期待您的回复。提前致谢。

1 个答案:

答案 0 :(得分:0)

在NSDateFormatter版本中,格式字符串应为@“yyyy-MM-dd”(小写y和d)。

查看日期格式设置模式: http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns

对于NSDateComponents版本,您在单元格中显示日期的代码是什么?