我们有一个简单的多人桌面游戏,不使用网络连接。它有一个脉冲动画,我们希望与所有其他设备同步播放。
为此,我查看了NSDate -timeIntervalSinceReferenceDate来计算延迟。假设所有设备在同一时间提供完全相同的值。但我们发现存在几秒钟的差异,因此这个值不是很精确。每个设备都与真实,正确的时间相差无几。
是否有另一种更精确的方法来获取自参考日期以来的时间间隔?
答案 0 :(得分:2)
假设所有设备在同一时间提供完全相同的值。
这是一个很大(无效)的假设,因为系统时间不太可能在多个设备上完全同步。询问当前时间取决于设备认为当前时间是什么,并且这不能保证在亚秒级精度下是正确的。
如果您想要更精确的时间,您可能需要在应用中嵌入network time protocol代码并使用时间服务器进行检查。你可能最好不要寻找本地的设备到设备通信来尝试同步动画 - 蓝牙,wifi,甚至让一个设备播放其他人可以听到的会触发动画的声音(例如“点击曲目“,播放重复的声音,其他设备可以同步到。”
答案 1 :(得分:1)
double unixpoch = 978307200 + [[NSDate date] timeIntervalSinceReferenceDate];
您也可以这样做:
double unixepoch = [[NSDate date] timeIntervalSince1970];`
两者都是一回事。记下那个常数是非常方便的,因为如果你开始将你的时间存储在使用ref日期的核心数据中并希望在像Base这样的浏览器中查看sqlite那么你需要知道这个sql的常量查询:
从ZBATTERYRECORD中选择ZBATTERYRECORD。*,datetime(zclientcreatedat + 978307200,'unixepoch')
您可能想知道978307200的用途。 iOS将日期存储为2001年1月1日之后的秒数而不是1970年,因此添加978307200秒差异会将日期向前移动到纪元。