iOS 计算 设备开机时间 与 腾讯手机助手核对过

  • NSProcessInfo 计算的开机时间不准确
  • 具体哪里不准确呢?
  • 举个例子:项目中需要展示开机时间,一开始使用NSProcessInfo计算的,没有发现意外,但是上线被拒,根据苹果反馈的截图,说不准确,我卸掉 app并且关机重启,经过多次测试,与腾讯手机助手一对比,确实在特殊情况下会出现不一致的情况(我的出现错误),打比方:10:00开的机,将手机锁屏,等到10:08分时,在打开手机,发现我的开机时间变为了10:03分,而不是10:00开的机,最后收集相关资料发现,确实会出现这样的错误,是因为手机处于休眠状态时,不会计时,导致我拿到的开机时间->现在的时间间隔变小,再往前推算开机时间,就会发生错误.
// 不准确
    NSProcessInfo * processInfo = [NSProcessInfo processInfo];
     //Get the uptime of the system
    NSTimeInterval UptimeInterval = [processInfo systemUptime];
    NSLog(@"----%f",UptimeInterval);
    NSDate *updateDate = [NSDate dateWithTimeIntervalSinceNow:-UptimeInterval];
    NSString *updateDateString = [NSDate jk_stringWithDate:updateDate format:@"YYYY-MM-dd HH:mm:ss"];
  • 正确方式
// 计算开机时间
+(NSTimeInterval) bootTime{
    struct timeval t;
    size_t len=sizeof(struct timeval);
    if(sysctlbyname("kern.boottime",&t,&len,0,0)!=0)
        return 0.0;
    return  t.tv_sec+t.tv_usec/USEC_PER_SEC;
}
// 类型转化
+ (NSString *)timeIntervalToFormat:(NSTimeInterval)localTimeInterval{
    time_t timeInterval = (time_t)localTimeInterval;
    struct tm *time = localtime(&timeInterval);
    NSString *timeStr = [NSString stringWithFormat:@"%d-%02d-%02d %02d:%02d:%02d",time->tm_year + 1900,time->tm_mon + 1,time->tm_mday,time->tm_hour,time->tm_min, time->tm_sec];
    return timeStr;
}

``

推荐阅读更多精彩内容