我使用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保存日期是否存在一些公认的问题?
期待您的回复。提前致谢。
答案 0 :(得分:0)
在NSDateFormatter版本中,格式字符串应为@“yyyy-MM-dd”(小写y和d)。
查看日期格式设置模式: http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
对于NSDateComponents版本,您在单元格中显示日期的代码是什么?