Ios 如何在NSDate中添加毫秒?

Ios 如何在NSDate中添加毫秒?,ios,objective-c,nsdate,nssortdescriptor,Ios,Objective C,Nsdate,Nssortdescriptor,我有一个核心数据,我的实体有一个名为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

我有一个核心数据,我的实体有一个名为
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];
编辑! 声明:

@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;

NSDate不包含毫秒。

日期对象是不可变的,表示不变的时间间隔 相对于绝对参考日期(1月1日00:00:00 UTC) 2001年)

此参考日期的单位为
NSTimeInterval
,该单位为
双精度
,小数部分包含毫秒

NSTimeInterval始终以秒为单位指定;它产生 超过10000年的亚毫秒精度

NSDate是通过使用指定的初始值设定项NSTIMEIVAL创建的。
-initWithTimeIntervalSinceReferenceDate:(NSTIMEIVAL)seconds
。如果我一个接一个地调用此方法,会发生以下情况:

        var interval = NSDate.timeIntervalSinceReferenceDate()
        print("\(interval)")
        interval = NSDate.timeIntervalSinceReferenceDate()
        print("\(interval)")

//        471879256.255005
//        471879256.259943
现在,CoreData可以直接保存NSDate对象,我的问题是:

  • 您正在保存NSDate还是格式化的字符串
  • 这些日期是如何创建的?从字符串?如果它们来自字符串,您是否正确读取它们
  • 请注意,您正在打印的是字符串表示法,如果要打印实际值,应询问
    -timeIntervalSinceReferenceDate
    属性,并确保描述符正在使用它进行排序


我真的怀疑CoreData是否能保存NSDate,将值四舍五入。

您能告诉我们如何在
NSDate
中添加年、月、日、小时、分和秒吗?假设原始输入具有该分辨率,则
NSDate
包含毫秒。
time
真的是一个
NSDate
还是一个
NSString
?我在创建sentTime后立即对您的问题进行了编辑,并将其写入并检查是否有十进制值NSLog(@“Interval%lf”,sentTime.timeIntervalSinceReferenceDate);如果日期格式没有错误,或者您试图在NSDate中转换的字符串没有暴露毫秒间隔471881576.851000,那么?正如您所看到的,它确实包含毫秒,一切似乎都是正确的,可能问题出在其他地方。要检查分拣机是否正确分拣,我将打印timeintervalsincerefdate而不是日期描述。您可以看到NSSortDescriptor是如何创建的。你知道哪里会出问题吗?