You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用epoch时间戳查询Core Data区间数据时结果不一致

问题原因

1. 谓词格式符使用错误,导致精度丢失

你在NSPredicate中使用了%f作为时间戳的占位符,%f在Core Data的解析逻辑中对应32位单精度浮点数,仅能保证约7位十进制有效数字。当前Unix时间戳已经是10位量级,用32位浮点数存储时,精度误差最大可达±64秒。
你示例中的记录1时间戳1631816962.0和endTimeStamp1631817000.0仅差38秒,被精度误差抹平了差距,甚至被判定为大于endTimeStamp,因此没有被查询返回。这也是问题只出现在23:59之后(时间戳接近当日end值)的核心原因。

2. 需确认时区计算逻辑

你所在时区为UTC+05:30,当地时间当日0点对应UTC前一天18:30,当地时间当日24点对应UTC当日18:30。请确认你计算startTimeStamp、endTimeStamp的逻辑确实覆盖了你需要的完整当日区间,避免时区偏移计算错误导致的区间截断。

解决方案

将谓词的格式符替换为适配64位浮点数的%lf,避免精度丢失:

let timeStampPredicate = NSPredicate(format: "timestamp >= %lf AND timestamp < %lf", startTimeStamp, endTimeStamp)

更稳妥的方案是将时间戳封装为NSNumber,用%@作为占位符,完全规避类型解析误差:

let timeStampPredicate = NSPredicate(format: "timestamp >= %@ AND timestamp < %@", NSNumber(value: startTimeStamp), NSNumber(value: endTimeStamp))

内容的提问来源于stack exchange,提问作者Nikhil Muskur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:09:02