iOS获取系统时间的各种方式
发布日期:2021-05-14 19:08:37 浏览次数:16 分类:精选文章

本文共 1596 字,大约阅读时间需要 5 分钟。

受系统时间影响的方式

某些方法获取时间信息会受到系统时间设置的影响。当设备的系统时间被人工修改时,这些方法返回的时间值也会相应改变。

1、NSDate

NSDate返回的是基于UTC时间的绝对时间值。这意味着它与时区无关,日期和时间描述的是UTC 2001年1月1日00:00:00以来经过的时间。由于NSDate本身不依赖于系统时区设置,要显示具体的时间格式,通常需要通过NSTimeZoneNSDateFormatter来添加时区信息进行格式化。

2、CFAbsoluteTimeGetCurrent()

CFAbsoluteTimeGetCurrent()返回的是基于GMT(格林尼治平均时间)的绝对时间值。GMT采用的是英国伦敦的格林尼治天文台时间,作为统一的标准参考时间。与UTC相比,GMT受地理环境的影响更大,而UTC则是基于精确的原子钟时间,误差极低。

GMT时间是基于英国伦敦的天文台,用于协调全球时间。但随着工具和技术的发展,基于原子钟的UTC时间已经取代了GMT作为更为精确和可靠的标准。

3、gettimeofday()

gettimeofday()函数返回的是当前时间的Unix time值,表示自1970年1月1日00:00:00 UTC以来经过的秒数。该值是基于UTC时间的,系统时间的改变直接影响到gettimeofday()函数返回的结果。

struct timeval now;struct timezone tz;gettimeofday(&now, &tz);
4、sysctl

sysctl命令可以用来获取系统内核的启动时间信息。这种信息也是基于系统时间设置的。当设备系统时间被修改时,sysctl返回的数据也会相应变化。

#include   
static int getBootTime() {
struct mib mib;
mib.name = CTL_KERN;
mib.level = KERN_BOOTTIME;
struct timeval bootTime;
size_t size;
if (sysctl(&mib, 1, &bootTime, &size, NULL, 0) == -1) {
return 0;
}
return bootTime.tv_sec;
}

受设备重启影响的方式

与系统时间修改不同,设备重启或进入休眠状态会对某些时间获取方法产生影响。

1、mach_absolute_time()

mach_absolute_time()函数返回的是基于CPU时钟周期的时间计数,单位是uint64_t。这个值反映的是设备的内部时钟周期数,通常很少被直接使用。但几乎所有的处理都是基于该函数的低层实现的,其精度可以达到纳秒(ns)级别。该方法不直接受系统时间设置的影响,而是受到设备是否处于休眠状态或已重启的限制。

2、CACurrentMediaTime()

CACurrentMediaTime()函数属于QuartzCore框架,其单位是CFTimeInterval,等价于从1970年1月1日以来的总时间。这一函数是mach_absolute_time()的封装版本,并将其结果转换为秒级表示。与CFAbsoluteTimeGetCurrent()类似,CACurrentMediaTime()的结果不直接受系统时间设置的影响,而是受到设备重启或者进入休眠状态的影响。

##### 3、NSProcessInfo

NSTimeInterval systemUptime = [[NSProcessInfo processInfo] systemUptime];
上一篇:第三章 嵌入式系统
下一篇:解析HTML标签

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月06日 00时46分50秒