• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何在 NSDate 中添加毫秒?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 12:39: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;



Best Answer-推荐答案


NSDate 确实包含毫秒。

Date objects are immutable, representing an invariant time interval relative to an absolute reference date (00:00:00 UTC on 1 January 2001).

此引用日期的单位是 NSTimeInterval,它是一个 double,小数部分包含毫秒。

NSTimeInterval is always specified in seconds; it yields sub-millisecond precision over a range of 10,000 years.

NSDate 是通过使用 NSTimeInterval 使用他指定的初始化器 -initWithTimeIntervalSinceReferenceDateNSTimeInterval)seconds 创建的。如果我一个接一个地调用此方法,会发生以下情况:

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

//        471879256.255005
//        471879256.259943

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

  • 你保存的是 NSDate 还是格式化的字符串?
  • 这些日期是如何创建的?从字符串?如果它们来自字符串,您是否正确阅读它们?
  • 注意,你打印的是一个字符串表示,如果你想打印真正的值,你应该问 -timeIntervalSinceReferenceDate 属性,你可以确定描述符是通过使用它来排序的.


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

关于ios - 如何在 NSDate 中添加毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290353/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap