在iOS中我们经常需要使用到时间戳,但在iOS下获取“时间”的方法有很多。不过总的来说,我们可以在iOS中获取的时间戳主要有两类----绝对时间与相对时间。下面将总结一下这些方法之间的关系。
绝对时间是指那些以固定时间为参考系的时间戳。
常用的有Foundation框架中的
[[NSDate date] timeIntervalSinceReferenceDate];
以及CoreFoundation框架中的
CFAbsoluteTimeGetCurrent();
上述两种方法是等价的,所参考的起始时间都是世界时间(UTC)2001年1月1日凌晨,所返回的double类型的结果都是从参考时间至今经过的秒数。
除了刚才提到的参考时间,还有以世界时间(UTC)1970年1月1日凌晨为参考系的
[[NSDate date] timeIntervalSince1970];
由于参考系是固定的,显然每次通过这些方法获取的时间戳都将是不同的。但绝对不变的参考系并不意味着绝对可靠的结果,实际上当用户手动改变了设备上的系统时间后,基于系统时钟的上述方法返回的结果也会一同改变。
假如我们想获取一种不会被用户手动修改而影响的时间戳,该怎么办?答案是相对时间。
相对时间是指以非固定时间为参考系返回的时间戳
常用的有Foundation框架中的
[[NSProcessInfo processInfo] systemUptime];
和QuartzCore框架中的
CACurrentMediaTime();
上面两种方法获取到的都是设备自最近一次启动至今经过的时间戳。 CFAbsoluteTimeGetCurrent() 方法调用底层的 mach_absolute_time() 方法后将结果转换成秒返回。该结果是设备自最近一次启动至今经过的时间,不随系统时间改变而改变,但当设备重启后,该方法返回的结果也会重置。
两类时间戳都有各自的特点:
绝对时间参考固定的时间点返回时间戳但结果会受系统时钟的影响;
相对时间在设备不重启的情况下总能正确返回某一时间段内流逝的时间;
所以具体要使用哪种方法获取时间戳需要结合不同的需求场景去选择。
获取到了时间戳,也许我们需要利用它来转换为时间并以一定的格式去展示,NSDate转NSString的方法网上有很多,在这里就不再叙述。需要注意的一点是,获取到绝对时间戳是以世界时间(UTC)为准的,NSDate中保存的日期也是以世界时间(UTC)为准的,所以在通过NSDateFormatter转换为NSString的时候一定要注意当前的时区。
如果App本身对获取的时间精度要求很高,还是直接通过网络从服务器获取时间戳会比较保险。当网络可用时,直接从服务器获取;网络不可用时,且设备没有被重启过,可以根据上一次获取服务器时间戳的时刻到此时的时间差来推算出正确的时间。
all-in-the-timing-keeping-track-of-time-passed-on-ios
ios13在北京时间2019年9月20日凌晨开始推送。
iOS是由苹果公司开发的移动 *** 作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPodtouch、iPad以及AppleTV等产品上。iOS与苹果的MacOSX *** 作系统一样,属于类Unix的商业 *** 作系统。原本这个系统名为iPhoneOS,因为iPad,iPhone,iPodtouch都使用iPhoneOS,所以2010WWDC大会上宣布改名为iOS(iOS为美国Cisco公司网络设备 *** 作系统注册商标,苹果改名已获得Cisco公司授权)。
按钮按下和抬起的时间差可以用
///长按开始绝对时间
@property ( nonatomic , assign )CFAbsoluteTime touchTime;
///长按开始
if (senderstate ==UIGestureRecognizerStateEnded){ ///获取结束的时间
CFAbsoluteTime over =CFAbsoluteTimeGetCurrent() - self touchTime;
///判断是否要结束
if (over>04){
///当时间大于04结束
}
} else if (senderstate ==UIGestureRecognizerStateBegan){
//开始时间
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
self touchTime = start;
}
//开始时间
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
// 记录结束时间
NSLog(@"%f",CFAbsoluteTimeGetCurrent() - start);
以上就是关于iOS时间戳杂谈全部的内容,包括:iOS时间戳杂谈、ios13什么时候出北京时间、iOS计算按钮的按下的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)