如何在NSDate中添加毫秒数?

时间:2015-12-15 13:19:55

标签: 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 +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;

1 个答案:

答案 0 :(得分:1)

NSDate确实包含毫秒。

  

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

此参考日期的单位是NSTimeIntervaldouble,小数部分包含毫秒数。

  

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对象,我的问题是:

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


我真的怀疑CoreData保存NSDate舍入值。