我的应用程序从 web 服务中获取日期字符串并将其解析到我的核心数据数据库中。网络服务返回此格式日期:
1900-01-01T00:00:00
我获取字符串并使用 NSDateFormatter 将其转换为 NSDate,然后将其粘贴到字段为 NSDate 类型的数据库中。但是当像这样设置值时:
- (void)setValue:(id)value forKey:(NSString *)key forManagedObject:(NSManagedObject *)managedObject {
if ([key isEqualToString:@"createdAt"] || [key isEqualToString:@"updatedAt"]) {
NSDate *date = [self dateUsingStringFromAPI:value];
[managedObject setValue:date forKey:key];
NSLog(@"the formatted date is %@", date);
} else {
[managedObject setValue:value forKey:key];
}
}
NSDate *date = [自我日期...];如果我将鼠标悬停在 NSDate *date 上,则行显示无效指针。然后,在设置值之后,一旦它到达下一行,managedObject setValue...,日期显示变量在两个实例中都不是 NSDate。格式化日期的 NSLog 返回:
格式化的日期是:
1900-01-01 00:00:00 +0000
这些值存储在数据库中,因为我正在查看 MesaSQlite 中的数据库并显示,日期为:
-3187296000
为什么我得到无效的指针和变量而不是 NSDate?
以下是 NSDateFormatter 方法:
#pragma Date Formatting Methods
- (void)initializeDateFormatter {
if (!self.dateFormatter) {
self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
[self.dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
}
}
- (NSDate *)dateUsingStringFromAPI:(NSString *)dateString {
[self initializeDateFormatter];
NSLog(@"dateString received from API == %@",dateString);
NSLog(@"value sent to setValue:forKey == %@",[self.dateFormatter dateFromString:dateString]);
return [self.dateFormatter dateFromString:dateString];
}