我有一个核心数据,我有一个名为time
NSDate
类型的实体的属性,其中包含在商店中添加的时间。
当我尝试提取数据时,我需要通过增加时间来订购,而我使用的是NSSortDescriptor
。我的问题是当我有两个或更多相同时间的条目时,例如:
time = "2015-12-15 12:48:08 +0000";
time = "2015-12-15 12:48:08 +0000";
time = "2015-12-15 12:48:09 +0000";
time = "2015-12-15 12:48:09 +0000";
此处订单将丢失,因为我在NSDate
中没有毫秒数。
我该如何解决这个问题?
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time"
ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
NSError *error;
NSArray *arr =[context executeFetchRequest:request error:&error];
EDIT! 声明:
@property (nonatomic, retain) NSDate * time;
初始化:
newContact.time = [NSDate date];
第二种初始化是:
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSString *timeString = [dateformatter stringFromDate:[NSDate date]]
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSDate *sentTime = [dateFormatter dateFromString:timeString];
newContact.time = sentTime;
答案 0 :(得分:1)
NSDate确实包含毫秒。
日期对象是不可变的,表示不变的时间间隔 相对于绝对参考日期(1月1日00:00:00 UTC) 2001)。
此参考日期的单位是NSTimeInterval
,double
,小数部分包含毫秒数。
NSTimeInterval总是以秒为单位指定;它产生了 在10,000年的范围内精确到亚毫秒级。
使用NSTimeInterval使用指定的初始化程序-initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
创建NSDate。如果我一个接一个地调用这个方法会发生什么:
var interval = NSDate.timeIntervalSinceReferenceDate()
print("\(interval)")
interval = NSDate.timeIntervalSinceReferenceDate()
print("\(interval)")
// 471879256.255005
// 471879256.259943
现在,CoreData可以直接保存NSDate对象,我的问题是:
-timeIntervalSinceReferenceDate
属性,并确保描述符使用它进行排序。
我真的怀疑CoreData保存NSDate舍入值。